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,82 +1,30 @@
1
- import { isAbsolute } from "node:path";
2
1
  import { z } from "zod";
3
2
  import { browserCompletenessSchema } from "./browserCompleteness.js";
4
3
  import { browserEndpointSchema } from "./browserObservation.js";
5
4
  import { webTextArtifactSchema } from "./webContentArtifact.js";
6
- /** Absolute operator-approved filesystem roots for Electron file pages. */
7
- export const electronFileRootsSchema = z
8
- .array(z
9
- .string()
10
- .min(1)
11
- .max(16_384)
12
- .refine(isAbsolute, "Electron file roots must be absolute paths"))
13
- .min(1)
14
- .max(32)
15
- .transform((roots) => [...new Set(roots)].sort());
16
5
  const approvedElectronInput = {
17
6
  cdp_endpoint: browserEndpointSchema,
18
- allowed_file_roots: electronFileRootsSchema,
19
- approved: z.literal(true),
20
7
  };
21
- /** Input for listing root-confined file:// page targets from Electron CDP. */
22
- export const listElectronTargetsInputSchema = z.object({
8
+ /** Input for listing local file:// page targets from an explicit Electron CDP endpoint. */
9
+ export const listElectronTargetsInputSchema = z.strictObject({
23
10
  ...approvedElectronInput,
24
- offset: z.number().int().min(0).default(0),
25
- limit: z.number().int().min(1).max(200).default(100),
26
11
  });
27
12
  /** Input for passive structural inspection of one Electron file page. */
28
- export const inspectElectronPageInputSchema = z
29
- .object({
13
+ const inspectElectronPageFacts = {
30
14
  ...approvedElectronInput,
31
- target_id: z.string().trim().min(1).max(256),
32
- observation_ms: z.number().int().min(0).max(10_000).default(100),
33
- include_script_sources: z.boolean().default(false),
34
- source_capture_approved: z.boolean().default(false),
35
- limits: z
36
- .object({
37
- max_frames: z.number().int().min(1).max(1_000).default(200),
38
- max_dom_nodes: z.number().int().min(1).max(10_000).default(2_000),
39
- max_scripts: z.number().int().min(1).max(2_000).default(500),
40
- max_resources: z.number().int().min(1).max(10_000).default(2_000),
41
- max_workers: z.number().int().min(1).max(5_000).default(500),
42
- max_script_source_bytes: z
43
- .number()
44
- .int()
45
- .min(1)
46
- .max(4 * 1_024 * 1_024)
47
- .default(1_024 * 1_024),
48
- max_total_script_source_bytes: z
49
- .number()
50
- .int()
51
- .min(1)
52
- .max(16 * 1_024 * 1_024)
53
- .default(4 * 1_024 * 1_024),
54
- })
55
- .default({
56
- max_frames: 200,
57
- max_dom_nodes: 2_000,
58
- max_scripts: 500,
59
- max_resources: 2_000,
60
- max_workers: 500,
61
- max_script_source_bytes: 1_024 * 1_024,
62
- max_total_script_source_bytes: 4 * 1_024 * 1_024,
15
+ target_id: z.string().trim().min(1),
16
+ observation_ms: z.number().int().min(0).default(100),
17
+ };
18
+ export const inspectElectronPageInputSchema = z.union([
19
+ z.strictObject({
20
+ ...inspectElectronPageFacts,
21
+ include_script_sources: z.literal(false).default(false),
63
22
  }),
64
- })
65
- .superRefine((input, context) => {
66
- if (input.include_script_sources && !input.source_capture_approved)
67
- context.addIssue({
68
- code: "custom",
69
- path: ["source_capture_approved"],
70
- message: "Electron script source capture requires separate approval",
71
- });
72
- if (input.limits.max_script_source_bytes >
73
- input.limits.max_total_script_source_bytes)
74
- context.addIssue({
75
- code: "custom",
76
- path: ["limits", "max_script_source_bytes"],
77
- message: "Per-script source limit cannot exceed the total source limit",
78
- });
79
- });
23
+ z.strictObject({
24
+ ...inspectElectronPageFacts,
25
+ include_script_sources: z.literal(true),
26
+ }),
27
+ ]);
80
28
  const browserVersionSchema = z.object({
81
29
  product: z.string(),
82
30
  protocol_version: z.string(),
@@ -91,20 +39,11 @@ const electronTargetSchema = z.object({
91
39
  file_path: z.string(),
92
40
  attached: z.boolean(),
93
41
  });
94
- /** Root-filtered Electron file target inventory. */
42
+ /** Complete local file target inventory from one Electron CDP endpoint. */
95
43
  export const electronTargetListSchema = z.object({
96
- schema_version: z.literal(1),
97
44
  browser: browserVersionSchema,
98
- targets: z.object({
99
- items: z.array(electronTargetSchema),
100
- offset: z.number().int().min(0),
101
- limit: z.number().int().min(1),
102
- total: z.number().int().min(0),
103
- next_offset: z.number().int().min(0).nullable(),
104
- has_more: z.boolean(),
105
- }),
45
+ targets: z.array(electronTargetSchema),
106
46
  excluded: z.object({
107
- outside_root: z.number().int().min(0),
108
47
  unsupported_url: z.number().int().min(0),
109
48
  non_page: z.number().int().min(0),
110
49
  }),
@@ -116,7 +55,6 @@ const electronSourceSchema = z.discriminatedUnion("included", [
116
55
  ]);
117
56
  /** Provider-neutral passive Electron file-page structure and script inventory. */
118
57
  export const electronPageInspectionSchema = z.object({
119
- schema_version: z.literal(1),
120
58
  browser: browserVersionSchema,
121
59
  target: electronTargetSchema,
122
60
  capture_window: z.object({
@@ -163,12 +101,12 @@ export const electronPageInspectionSchema = z.object({
163
101
  })),
164
102
  workers: z
165
103
  .array(z.object({
166
- target_id: z.string().min(1).max(256),
167
- type: z.string().min(1).max(100),
104
+ target_id: z.string().min(1),
105
+ type: z.string().min(1),
168
106
  file_path: z.string(),
169
107
  attached: z.boolean(),
170
- opener_target_id: z.string().min(1).max(256).nullable(),
171
- parent_frame_id: z.string().min(1).max(256).nullable(),
108
+ opener_target_id: z.string().min(1).nullable(),
109
+ parent_frame_id: z.string().min(1).nullable(),
172
110
  }))
173
111
  .default([]),
174
112
  limitations: z.array(z.string()),
@@ -2,7 +2,6 @@ import * as t from "@babel/types";
2
2
  import { boundedExpression, collectContextBridgeMembers, electronStaticValue, objectProperty, } from "./electronStaticAnalysisValues.js";
3
3
  import { addLocatedFinding } from "./javascriptStaticAnalysisFindings.js";
4
4
  import { argumentNode, calleeName, compareCodePoints, propertyName, range, staticPath, staticPathResolutionContext, } from "./javascriptStaticAnalysisHelpers.js";
5
- const MAX_WEB_PREFERENCES = 64;
6
5
  /** Inspect BrowserWindow, contextBridge, and utility-process syntax. */
7
6
  export const inspectElectronBrowserNode = (node, context) => {
8
7
  if (t.isNewExpression(node))
@@ -18,7 +17,7 @@ const inspectBrowserWindow = (node, context) => {
18
17
  return;
19
18
  const options = argumentNode(node.arguments[0]);
20
19
  const collected = collectWindowOptions(context.source, options);
21
- accountForStructure(context, collected.unknown, collected.omitted);
20
+ context.accumulator.unknownFindings += collected.unknown;
22
21
  const finding = {
23
22
  options_status: options === undefined
24
23
  ? "missing"
@@ -27,9 +26,7 @@ const inspectBrowserWindow = (node, context) => {
27
26
  : "dynamic",
28
27
  web_preferences_status: collected.status,
29
28
  web_preferences: collected.preferences,
30
- omitted_web_preferences: collected.omitted,
31
- preload_path: collected.preloadPath,
32
- preload_resolution_context: collected.preloadResolutionContext,
29
+ ...collected.preload,
33
30
  module_key: null,
34
31
  location: range(node),
35
32
  };
@@ -45,37 +42,33 @@ const collectWindowOptions = (source, options) => {
45
42
  return {
46
43
  status: options === undefined ? "missing" : "dynamic",
47
44
  preferences: [],
48
- preloadPath: null,
49
- preloadResolutionContext: null,
45
+ preload: { preload_path: null, preload_resolution_context: null },
50
46
  unknown: options === undefined ? 0 : 1,
51
- omitted: 0,
52
47
  };
53
48
  const property = objectProperty(options, "webPreferences");
54
49
  if (property === undefined)
55
50
  return {
56
51
  status: "missing",
57
52
  preferences: [],
58
- preloadPath: null,
59
- preloadResolutionContext: null,
53
+ preload: { preload_path: null, preload_resolution_context: null },
60
54
  unknown: 0,
61
- omitted: 0,
62
55
  };
63
56
  if (!t.isObjectExpression(property.value))
64
57
  return {
65
58
  status: "dynamic",
66
59
  preferences: [],
67
- preloadPath: null,
68
- preloadResolutionContext: null,
60
+ preload: { preload_path: null, preload_resolution_context: null },
69
61
  unknown: 1,
70
- omitted: 0,
71
62
  };
72
63
  return collectWebPreferences(source, property.value);
73
64
  };
74
65
  const collectWebPreferences = (source, object) => {
75
66
  const preferences = [];
76
67
  let unknown = 0;
77
- let preloadPath = null;
78
- let preloadResolutionContext = null;
68
+ let preload = {
69
+ preload_path: null,
70
+ preload_resolution_context: null,
71
+ };
79
72
  for (const property of object.properties) {
80
73
  if (t.isSpreadElement(property)) {
81
74
  unknown += 1;
@@ -103,10 +96,11 @@ const collectWebPreferences = (source, object) => {
103
96
  continue;
104
97
  }
105
98
  const path = name === "preload" ? staticPath(property.value) : undefined;
106
- if (path !== undefined) {
107
- preloadPath = path;
108
- preloadResolutionContext = staticPathResolutionContext(property.value);
109
- }
99
+ if (path !== undefined)
100
+ preload = {
101
+ preload_path: path,
102
+ preload_resolution_context: staticPathResolutionContext(property.value),
103
+ };
110
104
  const value = path === undefined
111
105
  ? electronStaticValue(source, property.value)
112
106
  : { status: "literal", value: path, expression: null };
@@ -117,11 +111,9 @@ const collectWebPreferences = (source, object) => {
117
111
  preferences.sort((left, right) => compareCodePoints(left.name, right.name));
118
112
  return {
119
113
  status: "object-literal",
120
- preferences: preferences.slice(0, MAX_WEB_PREFERENCES),
121
- preloadPath,
122
- preloadResolutionContext,
114
+ preferences,
115
+ preload,
123
116
  unknown,
124
- omitted: Math.max(0, preferences.length - MAX_WEB_PREFERENCES),
125
117
  };
126
118
  };
127
119
  const inspectContextBridge = (node, context) => {
@@ -142,18 +134,19 @@ const inspectContextBridge = (node, context) => {
142
134
  const unknown = (key.status === "dynamic" ? 1 : 0) +
143
135
  (worldId?.status === "dynamic" ? 1 : 0) +
144
136
  api.unknown;
145
- accountForStructure(context, unknown, api.omitted);
137
+ context.accumulator.unknownFindings += unknown;
138
+ const apiKey = key.status === "dynamic"
139
+ ? { api_key: null, api_key_expression: key.expression }
140
+ : typeof key.value === "string"
141
+ ? { api_key: key.value, api_key_expression: null }
142
+ : { api_key: null, api_key_expression: null };
146
143
  const finding = {
144
+ ...apiKey,
147
145
  world: isolated ? "isolated" : "main",
148
146
  world_id: worldId,
149
- api_key: key.status === "literal" && typeof key.value === "string"
150
- ? key.value
151
- : null,
152
- api_key_expression: key.status === "dynamic" ? key.expression : null,
153
147
  api_status: api.status,
154
148
  members: api.members,
155
149
  unknown_members: api.unknown,
156
- omitted_members: api.omitted,
157
150
  module_key: null,
158
151
  location: range(node),
159
152
  };
@@ -170,9 +163,6 @@ const inspectUtilityProcess = (node, context) => {
170
163
  return;
171
164
  const moduleNode = argumentNode(node.arguments[0]);
172
165
  const modulePath = moduleNode === undefined ? undefined : staticPath(moduleNode);
173
- const moduleResolutionContext = modulePath === undefined || moduleNode === undefined
174
- ? null
175
- : staticPathResolutionContext(moduleNode);
176
166
  const options = argumentNode(node.arguments[2]);
177
167
  const serviceName = t.isObjectExpression(options) &&
178
168
  objectProperty(options, "serviceName") !== undefined
@@ -180,27 +170,27 @@ const inspectUtilityProcess = (node, context) => {
180
170
  : undefined;
181
171
  if (modulePath === undefined)
182
172
  context.accumulator.unknownFindings += 1;
173
+ const moduleReference = modulePath === undefined || moduleNode === undefined
174
+ ? {
175
+ module_path: null,
176
+ module_resolution_context: null,
177
+ module_expression: boundedExpression(context.source, moduleNode),
178
+ }
179
+ : {
180
+ module_path: modulePath,
181
+ module_resolution_context: staticPathResolutionContext(moduleNode),
182
+ module_expression: null,
183
+ };
183
184
  const finding = {
184
- module_path: modulePath ?? null,
185
- module_resolution_context: moduleResolutionContext,
186
- module_expression: modulePath === undefined
187
- ? boundedExpression(context.source, moduleNode)
188
- : null,
185
+ ...moduleReference,
189
186
  service_name: serviceName ?? null,
190
187
  module_key: null,
191
188
  location: range(node),
192
189
  };
193
190
  addLocatedFinding(context, {
194
191
  collection: context.accumulator.utilityProcesses,
195
- key: `electron-utility\0${modulePath ?? finding.module_expression ?? "[missing]"}`,
192
+ key: `electron-utility\0${finding.module_path ?? finding.module_expression}`,
196
193
  node,
197
194
  value: finding,
198
195
  });
199
196
  };
200
- const accountForStructure = (context, unknown, omitted) => {
201
- context.accumulator.unknownFindings += unknown;
202
- if (omitted === 0)
203
- return;
204
- context.accumulator.structuralTruncation = true;
205
- context.accumulator.droppedFindings += omitted;
206
- };
@@ -21,29 +21,53 @@ const inspectIpcCall = (node, context) => {
21
21
  const channel = channelValue.status === "literal" && typeof channelValue.value === "string"
22
22
  ? channelValue.value
23
23
  : null;
24
- const channelExpression = channel === null
25
- ? channelValue.status === "dynamic"
26
- ? channelValue.expression
27
- : boundedExpression(context.source, channelNode)
28
- : null;
29
- const hasHandler = descriptor.mode === "listen" || descriptor.mode === "handle";
30
- const handlerNode = hasHandler ? argumentNode(node.arguments[1]) : undefined;
24
+ const channelReference = channel === null
25
+ ? {
26
+ channel: null,
27
+ channel_expression: channelValue.status === "dynamic"
28
+ ? channelValue.expression
29
+ : boundedExpression(context.source, channelNode),
30
+ }
31
+ : { channel, channel_expression: null };
32
+ const handlerNode = descriptor.mode === "listen" || descriptor.mode === "handle"
33
+ ? argumentNode(node.arguments[1])
34
+ : undefined;
35
+ const findingState = descriptor.mode === "send"
36
+ ? {
37
+ ...descriptor,
38
+ handler_kind: null,
39
+ handler_location: null,
40
+ }
41
+ : descriptor.mode === "invoke"
42
+ ? {
43
+ ...descriptor,
44
+ handler_kind: null,
45
+ handler_location: null,
46
+ }
47
+ : handlerNode === undefined
48
+ ? {
49
+ ...descriptor,
50
+ handler_kind: "missing",
51
+ handler_location: null,
52
+ }
53
+ : {
54
+ ...descriptor,
55
+ handler_kind: handlerKind(handlerNode),
56
+ handler_location: range(handlerNode),
57
+ };
31
58
  if (channel === null)
32
59
  context.accumulator.unknownFindings += 1;
33
- if (hasHandler && handlerNode === undefined)
60
+ if (findingState.handler_kind === "missing")
34
61
  context.accumulator.unknownFindings += 1;
35
62
  const finding = {
36
- ...descriptor,
37
- channel,
38
- channel_expression: channelExpression,
39
- handler_kind: hasHandler ? handlerKind(handlerNode) : null,
40
- handler_location: handlerNode === undefined ? null : range(handlerNode),
63
+ ...findingState,
64
+ ...channelReference,
41
65
  module_key: null,
42
66
  location: range(node),
43
67
  };
44
68
  addLocatedFinding(context, {
45
69
  collection: context.accumulator.ipc,
46
- key: `electron-ipc\0${descriptor.side}\0${descriptor.operation}\0${channel ?? channelExpression ?? "[missing]"}`,
70
+ key: `electron-ipc\0${descriptor.side}\0${descriptor.operation}\0${channelReference.channel ?? channelReference.channel_expression}`,
47
71
  node,
48
72
  value: finding,
49
73
  });
@@ -1,7 +1,6 @@
1
1
  import * as t from "@babel/types";
2
2
  import { addLocatedFinding } from "./javascriptStaticAnalysisFindings.js";
3
3
  import { argumentNode, calleeName, compareCodePoints, propertyName, range, stringValue, } from "./javascriptStaticAnalysisHelpers.js";
4
- const MAX_NATIVE_MEMBERS = 64;
5
4
  /** Inspect JavaScript-side imports and re-exports of native .node addons. */
6
5
  export const inspectElectronNativeNode = (node, context) => {
7
6
  if (t.isImportDeclaration(node))
@@ -91,12 +90,7 @@ const addBinding = (input) => {
91
90
  const unique = [
92
91
  ...new Set(input.members.filter((member) => member !== "")),
93
92
  ].sort(compareCodePoints);
94
- const members = (unique.length === 0 ? ["*"] : unique).slice(0, MAX_NATIVE_MEMBERS);
95
- const omitted = Math.max(0, unique.length - MAX_NATIVE_MEMBERS);
96
- if (omitted > 0) {
97
- context.accumulator.structuralTruncation = true;
98
- context.accumulator.droppedFindings += omitted;
99
- }
93
+ const members = unique.length === 0 ? ["*"] : unique;
100
94
  addLocatedFinding(context, {
101
95
  collection: context.accumulator.nativeAddonBindings,
102
96
  key: `native-addon-binding\0${kind}\0${specifier}\0${members.join("\0")}`,
@@ -105,7 +99,6 @@ const addBinding = (input) => {
105
99
  specifier,
106
100
  binding_kind: kind,
107
101
  members,
108
- members_truncated: omitted > 0,
109
102
  module_key: null,
110
103
  location: range(node),
111
104
  },
@@ -1,7 +1,6 @@
1
1
  import * as t from "@babel/types";
2
2
  import { compareCodePoints, propertyName, sourceSlice, } from "./javascriptStaticAnalysisHelpers.js";
3
- const MAX_EXPRESSION_CHARACTERS = 4_096;
4
- /** Preserve one literal value or the exact bounded inert expression. */
3
+ /** Preserve one literal value or the exact inert expression. */
5
4
  export const electronStaticValue = (source, node) => {
6
5
  const literal = literalValue(node);
7
6
  return literal.found
@@ -12,17 +11,16 @@ export const electronStaticValue = (source, node) => {
12
11
  expression: boundedExpression(source, node),
13
12
  };
14
13
  };
15
- /** Return an actionable bounded expression without evaluating it. */
14
+ /** Return an actionable expression without evaluating it. */
16
15
  export const boundedExpression = (source, node) => {
17
16
  if (node === null || node === undefined)
18
17
  return "[missing-expression]";
19
18
  const expression = sourceSlice(source, node).trim();
20
- return (expression === "" ? `[${node.type}]` : expression).slice(0, MAX_EXPRESSION_CHARACTERS);
19
+ return expression === "" ? `[${node.type}]` : expression;
21
20
  };
22
21
  /** Read one named object property without following spreads or bindings. */
23
22
  export const objectProperty = (object, name) => object.properties.find((property) => t.isObjectProperty(property) && propertyName(property.key) === name);
24
- /** Classify a handler argument while retaining its exact source range. */
25
- export const handlerKind = (node) => {
23
+ export function handlerKind(node) {
26
24
  if (node === null || node === undefined)
27
25
  return "missing";
28
26
  if (t.isArrowFunctionExpression(node) ||
@@ -34,31 +32,31 @@ export const handlerKind = (node) => {
34
32
  if (t.isMemberExpression(node) || t.isOptionalMemberExpression(node))
35
33
  return "member-expression";
36
34
  return "dynamic-expression";
37
- };
38
- /** Collect bounded dotted keys from one literal contextBridge API object. */
39
- export const collectContextBridgeMembers = (node, maximum = 128) => {
35
+ }
36
+ /** Collect statically visible dotted keys from one literal contextBridge API object. */
37
+ export const collectContextBridgeMembers = (node) => {
40
38
  if (node === null || node === undefined)
41
39
  return {
42
40
  status: "missing",
43
41
  members: [],
44
42
  unknown: 0,
45
- omitted: 0,
46
43
  };
47
44
  if (!t.isObjectExpression(node))
48
45
  return {
49
46
  status: "dynamic",
50
47
  members: [],
51
48
  unknown: 1,
52
- omitted: 0,
53
49
  };
54
- const state = { members: [], unknown: 0 };
50
+ const state = {
51
+ members: [],
52
+ unknown: 0,
53
+ };
55
54
  collectMembersAt(node, "", 0, state);
56
55
  const members = [...new Set(state.members)].sort(compareCodePoints);
57
56
  return {
58
57
  status: "object-literal",
59
- members: members.slice(0, maximum),
58
+ members,
60
59
  unknown: state.unknown,
61
- omitted: Math.max(0, members.length - maximum),
62
60
  };
63
61
  };
64
62
  const collectMembersAt = (object, prefix, depth, state) => {
@@ -76,7 +74,7 @@ const collectMembersAt = (object, prefix, depth, state) => {
76
74
  state.unknown += 1;
77
75
  continue;
78
76
  }
79
- const path = (prefix === "" ? name : `${prefix}.${name}`).slice(0, MAX_EXPRESSION_CHARACTERS);
77
+ const path = prefix === "" ? name : `${prefix}.${name}`;
80
78
  state.members.push(path);
81
79
  if (t.isObjectProperty(property) && t.isObjectExpression(property.value))
82
80
  collectMembersAt(property.value, path, depth + 1, state);
@@ -92,9 +90,7 @@ const literalValue = (node) => {
92
90
  if (t.isTemplateLiteral(node) && node.expressions.length === 0)
93
91
  return {
94
92
  found: true,
95
- value: (node.quasis[0]?.value.cooked ??
96
- node.quasis[0]?.value.raw ??
97
- "").slice(0, MAX_EXPRESSION_CHARACTERS),
93
+ value: node.quasis[0]?.value.cooked ?? node.quasis[0]?.value.raw ?? "",
98
94
  };
99
95
  if (t.isUnaryExpression(node, { operator: "-" }) &&
100
96
  t.isNumericLiteral(node.argument))
@@ -15,9 +15,7 @@ const ANALYSIS_ERROR_TAGS = [
15
15
  "ArtifactOperationError",
16
16
  "ProcessCaptureError",
17
17
  "EvidenceIntegrityError",
18
- "EvidenceLimitError",
19
18
  "EvidenceFileError",
20
- "InvestigationWorkspaceError",
21
19
  "UnknownRegistryError",
22
20
  "HopperTimeoutError",
23
21
  "HopperCancelledError",
@@ -109,20 +107,9 @@ export class ProviderSelectionError extends AnalysisError {
109
107
  candidateIds;
110
108
  rejections;
111
109
  userMessage;
112
- constructor(input) {
113
- const legacy = typeof input === "string";
114
- const options = legacy
115
- ? {
116
- operation: input,
117
- reason: "provider_unavailable",
118
- requestedProviderId: "auto",
119
- candidateIds: [],
120
- }
121
- : input;
110
+ constructor(options) {
122
111
  const operation = options.operation ?? "open_binary";
123
- super(legacy
124
- ? `No configured provider can execute ${operation}`
125
- : providerSelectionDiagnostic(options));
112
+ super(providerSelectionDiagnostic(options));
126
113
  this.operation = operation;
127
114
  this.reason = options.reason;
128
115
  this.requestedProviderId = options.requestedProviderId;
@@ -214,17 +201,6 @@ export class EvidenceReferenceError extends EvidenceIntegrityError {
214
201
  this.actual = actual;
215
202
  }
216
203
  }
217
- /** A bounded evidence ledger cannot accept more records or serialized bytes. */
218
- export class EvidenceLimitError extends AnalysisError {
219
- limit;
220
- maximum;
221
- _tag = "EvidenceLimitError";
222
- constructor(limit, maximum) {
223
- super(`Evidence ledger ${limit} limit exceeded (${String(maximum)})`);
224
- this.limit = limit;
225
- this.maximum = maximum;
226
- }
227
- }
228
204
  /** Evidence bundle filesystem access failed within the configured policy. */
229
205
  export class EvidenceFileError extends AnalysisError {
230
206
  operation;
@@ -236,17 +212,6 @@ export class EvidenceFileError extends AnalysisError {
236
212
  this.reason = reason;
237
213
  }
238
214
  }
239
- /** Persistent investigation workspace access or CAS validation failed. */
240
- export class InvestigationWorkspaceError extends AnalysisError {
241
- operation;
242
- reason;
243
- _tag = "InvestigationWorkspaceError";
244
- constructor(operation, reason, options) {
245
- super(`Investigation workspace ${operation} failed: ${reason}`, options);
246
- this.operation = operation;
247
- this.reason = reason;
248
- }
249
- }
250
215
  /** Residual-unknown mutation failed a lifecycle, reference, or CAS invariant. */
251
216
  export class UnknownRegistryError extends AnalysisError {
252
217
  reason;
@@ -259,10 +224,16 @@ export class UnknownRegistryError extends AnalysisError {
259
224
  /** Hopper did not respond within the configured operation deadline. */
260
225
  export class HopperTimeoutError extends HopperError {
261
226
  timeoutMs;
227
+ operation;
228
+ requestId;
229
+ providerState;
262
230
  _tag = "HopperTimeoutError";
263
- constructor(timeoutMs) {
264
- super(`Hopper did not respond within ${String(timeoutMs)}ms`);
231
+ constructor(timeoutMs, operation, requestId, providerState = "not_started") {
232
+ super(`Hopper ${operation === undefined ? "startup" : operation} timed out after ${String(timeoutMs)}ms`);
265
233
  this.timeoutMs = timeoutMs;
234
+ this.operation = operation;
235
+ this.requestId = requestId;
236
+ this.providerState = providerState;
266
237
  }
267
238
  }
268
239
  /** The caller cancelled a Hopper operation before it completed. */
@@ -276,30 +247,37 @@ export class HopperCancelledError extends HopperError {
276
247
  export class HopperProtocolError extends HopperError {
277
248
  _tag = "HopperProtocolError";
278
249
  }
279
- /** Hopper's JSON-RPC endpoint returned an expected remote error response. */
280
250
  export class HopperRemoteError extends HopperError {
281
251
  code;
282
252
  safeMessage;
283
- diagnosticType;
284
253
  _tag = "HopperRemoteError";
285
- constructor(code, safeMessage, diagnosticType = "remote") {
254
+ diagnosticType;
255
+ operation;
256
+ requestId;
257
+ constructor(code, safeMessage, context = {}) {
286
258
  super(`Hopper request failed (${String(code)}): ${safeMessage}`);
287
259
  this.code = code;
288
260
  this.safeMessage = safeMessage;
289
- this.diagnosticType = diagnosticType;
261
+ this.diagnosticType = context.diagnosticType ?? "remote";
262
+ this.operation = context.operation;
263
+ this.requestId = context.requestId;
290
264
  }
291
265
  }
292
266
  /** The owned Hopper bridge stopped before its client was closed. */
293
267
  export class HopperProcessError extends HopperError {
294
268
  exitCode;
295
269
  diagnostic;
270
+ operation;
271
+ requestId;
296
272
  _tag = "HopperProcessError";
297
273
  failureCode;
298
274
  userMessage;
299
- constructor(exitCode, diagnostic) {
275
+ constructor(exitCode, diagnostic, operation, requestId) {
300
276
  super(`Hopper bridge stopped unexpectedly with code ${String(exitCode)}`);
301
277
  this.exitCode = exitCode;
302
278
  this.diagnostic = diagnostic;
279
+ this.operation = operation;
280
+ this.requestId = requestId;
303
281
  const failure = hopperStartupFailure(exitCode);
304
282
  this.failureCode = failure?.code;
305
283
  this.userMessage = failure?.message;
@@ -308,8 +286,12 @@ export class HopperProcessError extends HopperError {
308
286
  /** Hopper or the repository bridge could not be started. */
309
287
  export class HopperStartError extends HopperError {
310
288
  _tag = "HopperStartError";
289
+ userMessage;
290
+ ownerRunId;
311
291
  constructor(options) {
312
292
  super("Hopper application bridge could not be started", options);
293
+ this.userMessage = options?.userMessage;
294
+ this.ownerRunId = options?.ownerRunId;
313
295
  }
314
296
  }
315
297
  /** Runtime configuration could not be parsed safely. */
@@ -338,16 +320,13 @@ export class PermissionRequiredError extends AnalysisError {
338
320
  requested;
339
321
  missing;
340
322
  ceiling;
341
- elicitationSupported;
342
- restartRequired;
343
- constructor(...args) {
344
- const [requested, missing, ceiling, elicitationSupported, restartRequired] = args;
345
- super(`Permission required for ${requested.capability}`);
346
- this.requested = requested;
347
- this.missing = missing;
348
- this.ceiling = ceiling;
349
- this.elicitationSupported = elicitationSupported;
350
- this.restartRequired = restartRequired;
323
+ remediation;
324
+ constructor(context) {
325
+ super(`Permission required for ${context.requested.capability}`);
326
+ this.requested = context.requested;
327
+ this.missing = context.missing;
328
+ this.ceiling = context.ceiling;
329
+ this.remediation = context.remediation;
351
330
  }
352
331
  }
353
332
  /** Approved replay commitment no longer matches the immediately rebuilt plan. */