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,11 +1,13 @@
1
+ import { z } from "zod";
1
2
  import { enhancedInputSchemas } from "../contracts/enhancedInputs.js";
2
3
  import { AnalysisCancelledError, AnalysisOutputError, projectAnalysisError, } from "../domain/errors.js";
3
4
  import { addressDistance, functionDossierSchema, parseDocuments, parseFunctionDossier, parseListCount, parseRelatedAddresses, parseSegments, } from "../domain/hopperValues.js";
4
5
  import { err, ok } from "../domain/result.js";
5
- import { categorizeSwiftTypes, discoverObjcClasses, discoverObjcProtocols, discoverSwiftClasses, } from "../domain/symbolAnalysis.js";
6
+ import { categorizeSwiftTypes, discoverObjcClasses, discoverObjcProtocols, } from "../domain/symbolAnalysis.js";
7
+ import { inspectNativeDispatchMetadata, nativeDispatchMetadataResultSchema, } from "../domain/objcSwiftMetadata.js";
8
+ import { traceNativeUiAction } from "./NativeUiActionTrace.js";
6
9
  import { jsonValueSchema } from "../domain/jsonValue.js";
7
10
  import { invalidEnhancedInput, } from "./EnhancedToolTypes.js";
8
- import { readAllAddressed } from "./EnhancedToolPagination.js";
9
11
  import { traceCallPath } from "./CallPathTracing.js";
10
12
  import { traceLiteralFeature } from "./EnhancedLiteralTracing.js";
11
13
  import { projectNativeApiInspection } from "./NativeApiInspection.js";
@@ -25,11 +27,17 @@ export class EnhancedTools {
25
27
  name === "find_code_for_string" ||
26
28
  name === "trace_call_path")
27
29
  return this.#executeTracing(name, input, signal);
30
+ if (name === "trace_native_ui_action") {
31
+ const parsed = enhancedInputSchemas.trace_native_ui_action.safeParse(input);
32
+ return parsed.success
33
+ ? this.executeValidated({ name, input: parsed.data }, signal)
34
+ : invalidEnhancedInput(name, parsed.error);
35
+ }
28
36
  if (name === "analyze_function" || name === "inspect_native_api")
29
37
  return this.#executeFunctionAnalysis(name, input, signal);
30
38
  switch (name) {
31
- case "swift_classes": {
32
- const parsed = enhancedInputSchemas.swift_classes.safeParse(input);
39
+ case "inspect_native_dispatch_metadata": {
40
+ const parsed = enhancedInputSchemas.inspect_native_dispatch_metadata.safeParse(input);
33
41
  return parsed.success
34
42
  ? this.executeValidated({ name, input: parsed.data }, signal)
35
43
  : invalidEnhancedInput(name, parsed.error);
@@ -54,8 +62,12 @@ export class EnhancedTools {
54
62
  ? this.executeValidated({ name, input: parsed.data }, signal)
55
63
  : invalidEnhancedInput(name, parsed.error);
56
64
  }
57
- case "analyze_swift_types":
58
- return this.executeValidated({ name, input: {} }, signal);
65
+ case "analyze_swift_types": {
66
+ const parsed = enhancedInputSchemas.analyze_swift_types.safeParse(input);
67
+ return parsed.success
68
+ ? this.executeValidated({ name, input: parsed.data }, signal)
69
+ : invalidEnhancedInput(name, parsed.error);
70
+ }
59
71
  case "find_xrefs_to_name": {
60
72
  const parsed = enhancedInputSchemas.find_xrefs_to_name.safeParse(input);
61
73
  return parsed.success
@@ -73,8 +85,8 @@ export class EnhancedTools {
73
85
  /** Dispatch input already parsed by a trusted adapter boundary. */
74
86
  executeValidated(call, signal) {
75
87
  switch (call.name) {
76
- case "swift_classes":
77
- return this.#swiftClasses(call.input.pattern, signal);
88
+ case "inspect_native_dispatch_metadata":
89
+ return this.#inspectNativeDispatchMetadata(call.input.max_records, signal);
78
90
  case "get_objc_classes":
79
91
  return this.#objcClasses(call.input.pattern, signal);
80
92
  case "get_objc_protocols":
@@ -84,11 +96,11 @@ export class EnhancedTools {
84
96
  case "get_call_graph":
85
97
  return this.#callGraph(call.input, signal);
86
98
  case "analyze_swift_types":
87
- return this.#analyzeSwiftTypes(signal);
99
+ return this.#analyzeSwiftTypes(call.input, signal);
88
100
  case "find_xrefs_to_name":
89
101
  return this.#findXrefs(call.input.name, signal);
90
102
  case "binary_overview":
91
- return this.#binaryOverview(call.input, signal);
103
+ return this.#binaryOverview(signal);
92
104
  case "analyze_function":
93
105
  return this.#analyzeFunction(call.input, signal);
94
106
  case "inspect_native_api":
@@ -99,35 +111,40 @@ export class EnhancedTools {
99
111
  return traceLiteralFeature((name, arguments_, operationSignal) => this.#call(name, arguments_, operationSignal), call.input, "string", signal);
100
112
  case "trace_call_path":
101
113
  return traceCallPath((name, arguments_, operationSignal) => this.#call(name, arguments_, operationSignal), call.input, signal);
114
+ case "trace_native_ui_action": {
115
+ return traceNativeUiAction(this.analysis, call.input, signal);
116
+ }
102
117
  }
103
118
  }
104
119
  #executeTracing(name, input, signal) {
105
- const parsed = enhancedInputSchemas[name].safeParse(input);
120
+ if (name === "trace_call_path") {
121
+ const parsed = enhancedInputSchemas.trace_call_path.safeParse(input);
122
+ if (!parsed.success)
123
+ return invalidEnhancedInput(name, parsed.error);
124
+ return this.executeValidated({ name, input: parsed.data }, signal);
125
+ }
126
+ if (name === "trace_feature") {
127
+ const parsed = enhancedInputSchemas.trace_feature.safeParse(input);
128
+ if (!parsed.success)
129
+ return invalidEnhancedInput(name, parsed.error);
130
+ return this.executeValidated({ name, input: parsed.data }, signal);
131
+ }
132
+ const parsed = enhancedInputSchemas.find_code_for_string.safeParse(input);
106
133
  if (!parsed.success)
107
134
  return invalidEnhancedInput(name, parsed.error);
108
- if (name === "trace_call_path")
109
- return this.executeValidated({
110
- name,
111
- input: enhancedInputSchemas.trace_call_path.parse(parsed.data),
112
- }, signal);
113
- return this.executeValidated({
114
- name,
115
- input: enhancedInputSchemas[name].parse(parsed.data),
116
- }, signal);
135
+ return this.executeValidated({ name, input: parsed.data }, signal);
117
136
  }
118
137
  #executeFunctionAnalysis(name, input, signal) {
119
- const parsed = enhancedInputSchemas[name].safeParse(input);
138
+ if (name === "analyze_function") {
139
+ const parsed = enhancedInputSchemas.analyze_function.safeParse(input);
140
+ if (!parsed.success)
141
+ return invalidEnhancedInput(name, parsed.error);
142
+ return this.executeValidated({ name, input: parsed.data }, signal);
143
+ }
144
+ const parsed = enhancedInputSchemas.inspect_native_api.safeParse(input);
120
145
  if (!parsed.success)
121
146
  return invalidEnhancedInput(name, parsed.error);
122
- if (name === "analyze_function")
123
- return this.executeValidated({
124
- name,
125
- input: enhancedInputSchemas.analyze_function.parse(parsed.data),
126
- }, signal);
127
- return this.executeValidated({
128
- name,
129
- input: enhancedInputSchemas.inspect_native_api.parse(parsed.data),
130
- }, signal);
147
+ return this.executeValidated({ name, input: parsed.data }, signal);
131
148
  }
132
149
  async #analyzeFunction(input, signal) {
133
150
  const result = await this.#call("analyze_function", input, signal);
@@ -136,9 +153,6 @@ export class EnhancedTools {
136
153
  async #inspectNativeApi(input, signal) {
137
154
  const analysisInput = enhancedInputSchemas.analyze_function.parse({
138
155
  procedure: input.procedure,
139
- include_assembly: true,
140
- max_pseudocode_chars: input.max_pseudocode_chars,
141
- max_instructions: input.max_instructions,
142
156
  });
143
157
  const result = await this.#call("analyze_function", analysisInput, signal);
144
158
  if (!result.ok)
@@ -149,16 +163,32 @@ export class EnhancedTools {
149
163
  const dossier = functionDossierSchema.parse(parsed.value);
150
164
  return ok(jsonValueSchema.parse(projectNativeApiInspection(dossier)));
151
165
  }
152
- async #swiftClasses(pattern, signal) {
153
- const procedures = await this.#allAddressed("list_procedures", signal);
154
- return procedures.ok
155
- ? ok(discoverSwiftClasses(procedures.value, pattern))
156
- : procedures;
157
- }
158
166
  async #objcClasses(pattern, signal) {
159
167
  const names = await this.#allAddressed("list_names", signal);
160
168
  return names.ok ? ok(discoverObjcClasses(names.value, pattern)) : names;
161
169
  }
170
+ async #inspectNativeDispatchMetadata(maxRecords, signal) {
171
+ const execution = await this.analysis.execute("list_names", {}, signal === undefined ? {} : { signal });
172
+ if (!execution.ok)
173
+ return err(execution.error);
174
+ const names = z
175
+ .array(z.union([
176
+ z.strictObject({ address: z.string(), value: z.string() }),
177
+ z.strictObject({ address: z.string(), name: z.string() }),
178
+ ]))
179
+ .safeParse(execution.value.result);
180
+ if (!names.success)
181
+ return err(new AnalysisOutputError("list_names", "provider returned an invalid inventory"));
182
+ return ok(nativeDispatchMetadataResultSchema.parse({
183
+ target_sha256: execution.value.subject?.sha256 ?? null,
184
+ provider: execution.value.provider,
185
+ analysis_profile_digest: execution.value.analysisProfile?.digest ?? null,
186
+ result: inspectNativeDispatchMetadata(names.data.map((entry) => ({
187
+ address: entry.address,
188
+ name: "value" in entry ? entry.value : entry.name,
189
+ })), maxRecords),
190
+ }));
191
+ }
162
192
  async #objcProtocols(signal) {
163
193
  const names = await this.#allAddressed("list_names", signal);
164
194
  return names.ok ? ok(discoverObjcProtocols(names.value)) : names;
@@ -199,9 +229,8 @@ export class EnhancedTools {
199
229
  const graph = {};
200
230
  while (queueIndex < queue.length) {
201
231
  const current = queue[queueIndex++];
202
- if (current === undefined || current.depth >= input.depth) {
232
+ if (current === undefined)
203
233
  continue;
204
- }
205
234
  const level = String(current.depth);
206
235
  graph[level] ??= [];
207
236
  const result = await this.#call(tool, { procedure: current.address }, signal);
@@ -227,21 +256,19 @@ export class EnhancedTools {
227
256
  status: "ok",
228
257
  calls: [...related.value],
229
258
  });
230
- if (current.depth + 1 < input.depth) {
231
- for (const address of related.value) {
232
- if (!discovered.has(address)) {
233
- discovered.add(address);
234
- queue.push({ address, depth: current.depth + 1 });
235
- }
259
+ for (const address of related.value) {
260
+ if (!discovered.has(address)) {
261
+ discovered.add(address);
262
+ queue.push({ address, depth: current.depth + 1 });
236
263
  }
237
264
  }
238
265
  }
239
266
  return ok(graph);
240
267
  }
241
- async #analyzeSwiftTypes(signal) {
268
+ async #analyzeSwiftTypes(input, signal) {
242
269
  const procedures = await this.#allAddressed("list_procedures", signal);
243
270
  return procedures.ok
244
- ? ok(categorizeSwiftTypes(procedures.value))
271
+ ? ok(categorizeSwiftTypes(procedures.value, input))
245
272
  : procedures;
246
273
  }
247
274
  async #findXrefs(name, signal) {
@@ -264,12 +291,12 @@ export class EnhancedTools {
264
291
  xrefs: xrefs.value,
265
292
  });
266
293
  }
267
- async #binaryOverview(input, signal) {
294
+ async #binaryOverview(signal) {
268
295
  const [segmentsResult, documentsResult, proceduresResult, stringsResult] = await Promise.all([
269
296
  this.#call("list_segments", {}, signal),
270
297
  this.#call("list_documents", {}, signal),
271
- this.#call("list_procedures", { offset: 0, limit: 1 }, signal),
272
- this.#call("list_strings", { offset: 0, limit: 1 }, signal),
298
+ this.#call("list_procedures", {}, signal),
299
+ this.#call("list_strings", {}, signal),
273
300
  ]);
274
301
  if (!segmentsResult.ok)
275
302
  return segmentsResult;
@@ -293,28 +320,35 @@ export class EnhancedTools {
293
320
  return stringCount;
294
321
  return ok({
295
322
  document: documents.value[0] ?? "unknown",
296
- detail: input.detail,
297
- segments: segments.value
298
- .slice(0, input.limit)
299
- .map(({ name, start, end }) => input.detail === "detailed"
300
- ? { name, start, end, length: addressDistance(start, end) }
301
- : { name, start, end }),
323
+ segments: segments.value.map(({ name, start, end }) => ({
324
+ name,
325
+ start,
326
+ end,
327
+ length: addressDistance(start, end),
328
+ })),
302
329
  segment_count: segments.value.length,
303
330
  procedure_count: procedureCount.value,
304
331
  string_count: stringCount.value,
305
332
  });
306
333
  }
307
334
  async #allAddressed(tool, signal) {
308
- return readAllAddressed({
309
- call: (name, arguments_, operationSignal) => this.#call(name, arguments_, operationSignal),
310
- tool,
311
- ...(signal === undefined ? {} : { signal }),
312
- });
335
+ const result = await this.#call(tool, {}, signal);
336
+ if (!result.ok)
337
+ return result;
338
+ const parsed = z
339
+ .array(z.object({ address: z.string(), value: z.string() }))
340
+ .safeParse(result.value);
341
+ return parsed.success
342
+ ? ok(parsed.data.map(({ address, value: name }) => ({ address, name })))
343
+ : err(new AnalysisOutputError(tool, "provider returned an invalid inventory"));
313
344
  }
314
345
  async #call(name, arguments_, signal) {
315
- if (signal?.aborted === true)
346
+ if (isAborted(signal))
316
347
  return err(new AnalysisCancelledError(name));
317
348
  const execution = await this.analysis.execute(name, arguments_, signal === undefined ? {} : { signal });
349
+ if (isAborted(signal))
350
+ return err(new AnalysisCancelledError(name));
318
351
  return execution.ok ? ok(execution.value.result) : execution;
319
352
  }
320
353
  }
354
+ const isAborted = (signal) => signal?.aborted === true;
@@ -4,36 +4,40 @@ import { err, ok } from "../domain/result.js";
4
4
  import { compareBundles } from "../domain/bundleComparison.js";
5
5
  import { EvidenceLedger } from "./EvidenceLedger.js";
6
6
  import { readEvidenceBundle, writeEvidenceBundle, } from "./EvidenceBundleFiles.js";
7
- /** Validate and merge one bundle using the same bounded ledger as MCP. */
8
- export const importEvidenceBundleCommand = async (path, policy) => {
9
- const loaded = await readEvidenceBundle(path, policy);
7
+ /** Validate and merge one bundle using the session Evidence ledger. */
8
+ export const importEvidenceBundleCommand = async (path) => {
9
+ const loaded = await readEvidenceBundle(path);
10
10
  if (!loaded.ok)
11
11
  return loaded;
12
12
  const ledger = createLedger();
13
13
  const imported = ledger.import(loaded.value);
14
14
  return imported.ok
15
- ? ok({ imported: imported.value, total: ledger.export().records.length })
15
+ ? ok({
16
+ imported: imported.value.recordsAdded,
17
+ unknowns_added: imported.value.unknownsAdded,
18
+ total: ledger.export().records.length,
19
+ })
16
20
  : imported;
17
21
  };
18
22
  /** Validate a source bundle and atomically export canonical bytes. */
19
- export const exportEvidenceBundleCommand = async (sourcePath, outputPath, overwrite, policy) => {
20
- const loaded = await readEvidenceBundle(sourcePath, policy);
23
+ export const exportEvidenceBundleCommand = async (sourcePath, outputPath, overwrite) => {
24
+ const loaded = await readEvidenceBundle(sourcePath);
21
25
  if (!loaded.ok)
22
26
  return loaded;
23
- return projectWrite(loaded.value, await writeEvidenceBundle(loaded.value, outputPath, overwrite, policy));
27
+ return projectWrite(loaded.value, await writeEvidenceBundle(loaded.value, outputPath, overwrite));
24
28
  };
25
- /** Compare two validated canonical Evidence v2 bundles without session state. */
29
+ /** Compare two validated canonical Evidence bundles without session state. */
26
30
  export const compareEvidenceBundlesCommand = async (input) => {
27
31
  const [left, right] = await Promise.all([
28
- readEvidenceBundle(input.leftPath, input.policy),
29
- readEvidenceBundle(input.rightPath, input.policy),
32
+ readEvidenceBundle(input.leftPath),
33
+ readEvidenceBundle(input.rightPath),
30
34
  ]);
31
35
  if (!left.ok)
32
36
  return left;
33
37
  if (!right.ok)
34
38
  return right;
35
39
  try {
36
- return ok(jsonValueSchema.parse(compareBundles(left.value, right.value, [], input.offset, input.limit)));
40
+ return ok(jsonValueSchema.parse(compareBundles(left.value, right.value)));
37
41
  }
38
42
  catch (cause) {
39
43
  return err(new EvidenceIntegrityError("Evidence bundle comparison failed", {
@@ -41,7 +45,7 @@ export const compareEvidenceBundlesCommand = async (input) => {
41
45
  }));
42
46
  }
43
47
  };
44
- const createLedger = () => new EvidenceLedger({ maxRecords: 10_000, maxBytes: 64 * 1024 * 1024 });
48
+ const createLedger = () => new EvidenceLedger();
45
49
  const projectWrite = (bundle, written) => written.ok
46
50
  ? ok({
47
51
  path: written.value.path,
@@ -1,21 +1,17 @@
1
1
  import { parseEvidenceBundle, serializeEvidenceBundle, } from "../domain/evidenceBundle.js";
2
2
  import { EvidenceFileError, EvidenceIntegrityError } from "../domain/errors.js";
3
3
  import { err, ok } from "../domain/result.js";
4
- import { LEGACY_PROCESS_CAPTURE_MESSAGE, parseProcessCapture, } from "../domain/processCapture.js";
5
- import { readBoundedJson, writeBoundedText } from "./BoundedJsonFiles.js";
6
- /** Read and validate a bounded evidence bundle inside an approved root. */
7
- export const readEvidenceBundle = async (path, policy) => {
8
- if (policy.roots.length === 0)
9
- return err(new EvidenceFileError("read", "disabled"));
10
- const loaded = await readBoundedJson(path, policy);
4
+ import { parseProcessCapture } from "../domain/processCapture.js";
5
+ import { readJsonFile, writeTextFile } from "./JsonFiles.js";
6
+ /** Read and validate an evidence bundle at the caller-supplied path. */
7
+ export const readEvidenceBundle = async (path) => {
8
+ const loaded = await readJsonFile(path);
11
9
  if (!loaded.ok)
12
10
  return loaded;
13
11
  try {
14
12
  const bundle = parseEvidenceBundle(loaded.value);
15
13
  for (const record of bundle.records) {
16
- if (record.predicate_type === "rea.process-capture/v3")
17
- throw new TypeError(LEGACY_PROCESS_CAPTURE_MESSAGE);
18
- if (record.predicate_type === "rea.process-capture/v4")
14
+ if (record.predicate_type === "rea.process-capture")
19
15
  parseProcessCapture(record.normalized_result);
20
16
  }
21
17
  return ok(bundle);
@@ -26,10 +22,8 @@ export const readEvidenceBundle = async (path, policy) => {
26
22
  }));
27
23
  }
28
24
  };
29
- /** Atomically write deterministic evidence JSON inside an approved root. */
30
- export const writeEvidenceBundle = async (bundle, path, overwrite, policy) => {
31
- if (policy.roots.length === 0)
32
- return err(new EvidenceFileError("write", "disabled"));
25
+ /** Atomically write deterministic evidence JSON at the caller-supplied path. */
26
+ export const writeEvidenceBundle = async (bundle, path, overwrite) => {
33
27
  let encoded;
34
28
  try {
35
29
  encoded = serializeEvidenceBundle(bundle);
@@ -39,5 +33,5 @@ export const writeEvidenceBundle = async (bundle, path, overwrite, policy) => {
39
33
  cause,
40
34
  }));
41
35
  }
42
- return writeBoundedText(encoded, path, overwrite, policy);
36
+ return writeTextFile(encoded, path, overwrite);
43
37
  };
@@ -1,23 +1,14 @@
1
1
  import canonicalize from "canonicalize";
2
2
  import { createEvidenceBundle, parseEvidenceBundle, validateResidualUnknownAddition, } from "../domain/evidenceBundle.js";
3
- import { EvidenceIntegrityError, EvidenceLimitError, UnknownRegistryError, } from "../domain/errors.js";
3
+ import { EvidenceIntegrityError, UnknownRegistryError, } from "../domain/errors.js";
4
4
  import { parseEvidence } from "../domain/evidence.js";
5
5
  import { createResidualUnknown, updateResidualUnknown, } from "../domain/residualUnknown.js";
6
6
  import { err, ok } from "../domain/result.js";
7
- /** Bounded, session-owned set of immutable evidence records. */
7
+ /** Session-owned set of immutable evidence records. */
8
8
  export class EvidenceLedger {
9
- limits;
10
9
  #records = new Map();
11
10
  #unknownRevisions = new Map();
12
11
  #unknownHeads = new Map();
13
- #bytes = 0;
14
- constructor(limits) {
15
- this.limits = limits;
16
- if (!Number.isSafeInteger(limits.maxRecords) || limits.maxRecords < 1)
17
- throw new RangeError("maxRecords must be a positive safe integer");
18
- if (!Number.isSafeInteger(limits.maxBytes) || limits.maxBytes < 1)
19
- throw new RangeError("maxBytes must be a positive safe integer");
20
- }
21
12
  /** Record evidence idempotently; conflicting content is rejected. */
22
13
  record(input) {
23
14
  let evidence;
@@ -35,13 +26,7 @@ export class EvidenceLedger {
35
26
  ? ok("duplicate")
36
27
  : err(new EvidenceIntegrityError("Conflicting evidence record"));
37
28
  }
38
- if (this.#exceedsRecordLimit(this.#records.size + 1, this.#unknownRevisions.size))
39
- return err(new EvidenceLimitError("records", this.limits.maxRecords));
40
- const bytes = serializedBytes(evidence);
41
- if (this.#bytes + bytes > this.limits.maxBytes)
42
- return err(new EvidenceLimitError("bytes", this.limits.maxBytes));
43
29
  this.#records.set(evidence.evidence_id, evidence);
44
- this.#bytes += bytes;
45
30
  return ok("added");
46
31
  }
47
32
  /** Validate an entire bundle before atomically merging its records. */
@@ -63,6 +48,7 @@ export class EvidenceLedger {
63
48
  pending.set(evidence.evidence_id, evidence);
64
49
  }
65
50
  const pendingUnknowns = new Map(this.#unknownRevisions);
51
+ let unknownsAdded = 0;
66
52
  for (const unknown of bundle.unknowns) {
67
53
  const key = unknownRevisionKey(unknown);
68
54
  const existing = pendingUnknowns.get(key);
@@ -70,6 +56,8 @@ export class EvidenceLedger {
70
56
  existing.revision_digest !== unknown.revision_digest)
71
57
  return err(new EvidenceIntegrityError("Conflicting unknown revision"));
72
58
  pendingUnknowns.set(key, unknown);
59
+ if (existing === undefined)
60
+ unknownsAdded += 1;
73
61
  }
74
62
  const checked = this.#validateCandidate(pending, pendingUnknowns);
75
63
  if (!checked.ok) {
@@ -80,8 +68,12 @@ export class EvidenceLedger {
80
68
  return err(checked.error);
81
69
  }
82
70
  const added = pending.size - this.#records.size;
83
- this.#commit(pending, pendingUnknowns, checked.value);
84
- return ok(added);
71
+ this.#commit(pending, pendingUnknowns);
72
+ return ok({
73
+ recordsAdded: added,
74
+ unknownsAdded,
75
+ changed: added > 0 || unknownsAdded > 0,
76
+ });
85
77
  }
86
78
  /** Export records in deterministic, semantically irrelevant ID order. */
87
79
  export() {
@@ -118,7 +110,7 @@ export class EvidenceLedger {
118
110
  return err(new UnknownRegistryError("already-exists"));
119
111
  return this.#appendUnknown(unknown, parsedMutation);
120
112
  }
121
- /** Atomically record derived Evidence and an approved residual unknown. */
113
+ /** Atomically record derived Evidence and a linked residual unknown. */
122
114
  recordWithUnknown(evidenceInput, input, mutationInput) {
123
115
  let evidence;
124
116
  let mutation;
@@ -199,7 +191,6 @@ export class EvidenceLedger {
199
191
  this.#records.clear();
200
192
  this.#unknownRevisions.clear();
201
193
  this.#unknownHeads.clear();
202
- this.#bytes = 0;
203
194
  }
204
195
  #appendUnknown(unknown, mutationEvidenceInput) {
205
196
  let mutationEvidence;
@@ -218,7 +209,6 @@ export class EvidenceLedger {
218
209
  }
219
210
  #appendIncremental(records, unknown) {
220
211
  const additions = new Map();
221
- let addedBytes = 0;
222
212
  for (const evidence of records) {
223
213
  const existing = additions.get(evidence.evidence_id) ??
224
214
  this.#records.get(evidence.evidence_id);
@@ -228,16 +218,10 @@ export class EvidenceLedger {
228
218
  continue;
229
219
  }
230
220
  additions.set(evidence.evidence_id, evidence);
231
- addedBytes += serializedBytes(evidence);
232
221
  }
233
222
  const unknownKey = unknown === undefined ? undefined : unknownRevisionKey(unknown);
234
223
  if (unknownKey !== undefined && this.#unknownRevisions.has(unknownKey))
235
224
  return err(new UnknownRegistryError("integrity"));
236
- const unknownBytes = unknown === undefined ? 0 : serializedBytes(unknown);
237
- if (this.#exceedsRecordLimit(this.#records.size + additions.size, this.#unknownRevisions.size + (unknown === undefined ? 0 : 1)))
238
- return err(new EvidenceLimitError("records", this.limits.maxRecords));
239
- if (this.#bytes + addedBytes + unknownBytes > this.limits.maxBytes)
240
- return err(new EvidenceLimitError("bytes", this.limits.maxBytes));
241
225
  if (unknown !== undefined)
242
226
  try {
243
227
  validateResidualUnknownAddition(unknown, {
@@ -254,28 +238,18 @@ export class EvidenceLedger {
254
238
  this.#unknownRevisions.set(unknownKey, unknown);
255
239
  this.#unknownHeads.set(unknown.unknown_id, unknown);
256
240
  }
257
- this.#bytes += addedBytes + unknownBytes;
258
241
  return ok(undefined);
259
242
  }
260
243
  #validateCandidate(records, unknowns) {
261
- if (this.#exceedsRecordLimit(records.size, unknowns.size))
262
- return err(new EvidenceLimitError("records", this.limits.maxRecords));
263
- const bytes = [...records.values()].reduce((total, evidence) => total + serializedBytes(evidence), 0) +
264
- [...unknowns.values()].reduce((total, unknown) => total + serializedBytes(unknown), 0);
265
- if (bytes > this.limits.maxBytes)
266
- return err(new EvidenceLimitError("bytes", this.limits.maxBytes));
267
244
  try {
268
245
  parseEvidenceBundle(createEvidenceBundle([...records.values()], [...unknowns.values()]));
269
246
  }
270
247
  catch (cause) {
271
248
  return err(new UnknownRegistryError("integrity", { cause }));
272
249
  }
273
- return ok(bytes);
274
- }
275
- #exceedsRecordLimit(recordCount, unknownCount) {
276
- return recordCount + unknownCount > this.limits.maxRecords;
250
+ return ok(undefined);
277
251
  }
278
- #commit(records, unknowns, bytes) {
252
+ #commit(records, unknowns) {
279
253
  this.#records.clear();
280
254
  for (const [id, evidence] of records)
281
255
  this.#records.set(id, evidence);
@@ -287,10 +261,8 @@ export class EvidenceLedger {
287
261
  if (head === undefined || head.revision < unknown.revision)
288
262
  this.#unknownHeads.set(unknown.unknown_id, unknown);
289
263
  }
290
- this.#bytes = bytes;
291
264
  }
292
265
  }
293
- const serializedBytes = (value) => Buffer.byteLength(JSON.stringify(value), "utf8");
294
266
  const unknownRevisionKey = (unknown) => `${unknown.unknown_id}:${String(unknown.revision)}`;
295
267
  const recordsAgree = (left, right) => canonicalize(withoutLocalPath(left)) ===
296
268
  canonicalize(withoutLocalPath(right));
@@ -1,9 +1,8 @@
1
+ import { isPathWithinRoot } from "../domain/localPath.js";
1
2
  import { createHash } from "node:crypto";
2
3
  import { constants as fsConstants } from "node:fs";
3
4
  import { lstat, open, readdir, readlink } from "node:fs/promises";
4
5
  import { dirname, join, relative, resolve } from "node:path";
5
- const isWithin = (candidate, root) => candidate === root ||
6
- candidate.startsWith(`${root.endsWith("/") ? root.slice(0, -1) : root}/`);
7
6
  const hasSameIdentity = (before, after, expected) => before.dev === after.dev &&
8
7
  before.ino === after.ino &&
9
8
  (expected === "directory" ? after.isDirectory() : after.isSymbolicLink());
@@ -66,7 +65,7 @@ export const snapshotRoots = async (scenario, signal) => {
66
65
  truncated = true;
67
66
  return;
68
67
  }
69
- const safeTarget = isWithin(target, root)
68
+ const safeTarget = isPathWithinRoot(root, target)
70
69
  ? relative(root, target) || "."
71
70
  : "<outside-declared-root>";
72
71
  if (safeTarget === "<outside-declared-root>")