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,9 +1,8 @@
1
+ import { clientConfigurationValuesEqual, parseClientConfiguration, serializeClientConfiguration, } from "./ClientConfigurationDocument.js";
1
2
  import { constants as fsConstants } from "node:fs";
2
3
  import { copyFile, mkdir, readFile, rm, writeFile } from "node:fs/promises";
3
4
  import { dirname } from "node:path";
4
- import { z } from "zod";
5
5
  import writeFileAtomic from "write-file-atomic";
6
- import { parse as parseToml, stringify as stringifyToml } from "smol-toml";
7
6
  import { PRODUCT_IDENTITY } from "../identity.js";
8
7
  import { MCP_STARTUP_POLICY } from "../mcpStartupPolicy.js";
9
8
  import { resolveClientConfigTransactionPath } from "./ClientConfigPath.js";
@@ -14,43 +13,43 @@ const defaultCommand = () => [
14
13
  "mcp",
15
14
  ];
16
15
  /** Back up, atomically update, and semantically read back one JSON MCP configuration. */
17
- export const configureJsonClient = async (client, environment = {}, command = defaultCommand()) => {
16
+ export const configureJsonClient = (client, environment = {}, command = defaultCommand()) => configureClientDocument(client, environment, command, "json");
17
+ /** Back up, atomically update, and semantically read back one TOML MCP configuration. */
18
+ export const configureTomlClient = (client, environment = {}, command = defaultCommand()) => configureClientDocument(client, environment, command, "toml");
19
+ const configureClientDocument = async (client, environment, command, format) => {
18
20
  const transactionPath = await resolveClientConfigTransactionPath(client.configPath);
19
21
  if (transactionPath === undefined)
20
22
  return { status: "failed", reason: "path" };
21
- let document = {};
22
23
  let original;
23
24
  try {
24
25
  original = await readFile(transactionPath, "utf8");
25
- document = parseObject(original);
26
26
  }
27
27
  catch (cause) {
28
28
  if (!isMissing(cause))
29
29
  return { status: "failed", reason: "readback" };
30
30
  }
31
- let servers;
31
+ let parsed;
32
32
  try {
33
- servers = parseOptionalObject(document.mcpServers);
33
+ parsed = parseClientConfiguration(original ?? (format === "toml" ? "" : "{}"), format);
34
34
  }
35
35
  catch {
36
36
  return { status: "failed", reason: "readback" };
37
37
  }
38
- const desired = clientConfigurationDesired(client, normalizeProviderEnvironment(environment), command);
39
- if (sameConfiguration(servers[PRODUCT_IDENTITY.mcpServerKey], desired))
38
+ const { document, servers, serversKey } = parsed;
39
+ const desired = clientConfigurationDesired(client, environment, command);
40
+ if (clientConfigurationValuesEqual(servers[PRODUCT_IDENTITY.mcpServerKey], desired))
40
41
  return { status: "unchanged" };
41
- let backupPath;
42
- if (original !== undefined) {
43
- backupPath = `${client.configPath}.rea.backup`;
44
- if (!(await preserveConfigBackup(transactionPath, backupPath)))
45
- return { status: "failed", reason: "backup" };
46
- }
47
- document.mcpServers = {
42
+ const backupPath = original === undefined ? undefined : `${client.configPath}.rea.backup`;
43
+ if (backupPath !== undefined &&
44
+ !(await preserveConfigBackup(transactionPath, backupPath)))
45
+ return { status: "failed", reason: "backup" };
46
+ document[serversKey] = {
48
47
  ...servers,
49
48
  [PRODUCT_IDENTITY.mcpServerKey]: desired,
50
49
  };
51
50
  try {
52
51
  await mkdir(dirname(client.configPath), { recursive: true });
53
- await writeFileAtomic(transactionPath, `${JSON.stringify(document, null, 2)}\n`, {
52
+ await writeFileAtomic(transactionPath, serializeClientConfiguration(document, format), {
54
53
  encoding: "utf8",
55
54
  mode: 0o600,
56
55
  });
@@ -59,8 +58,8 @@ export const configureJsonClient = async (client, environment = {}, command = de
59
58
  return { status: "failed", reason: "write" };
60
59
  }
61
60
  try {
62
- const readback = parseObject(await readFile(transactionPath, "utf8"));
63
- if (!sameConfiguration(parseOptionalObject(readback.mcpServers)[PRODUCT_IDENTITY.mcpServerKey], desired)) {
61
+ const readback = parseClientConfiguration(await readFile(transactionPath, "utf8"), format);
62
+ if (!clientConfigurationValuesEqual(readback.servers[PRODUCT_IDENTITY.mcpServerKey], desired)) {
64
63
  await restoreConfig(transactionPath, original);
65
64
  return { status: "failed", reason: "readback" };
66
65
  }
@@ -74,68 +73,13 @@ export const configureJsonClient = async (client, environment = {}, command = de
74
73
  ...(backupPath === undefined ? {} : { backupPath }),
75
74
  };
76
75
  };
77
- /** Back up, atomically update, and semantically read back Codex TOML configuration. */
78
- export const configureTomlClient = async (client, environment = {}, command = defaultCommand()) => {
79
- const transactionPath = await resolveClientConfigTransactionPath(client.configPath);
80
- if (transactionPath === undefined)
81
- return { status: "failed", reason: "path" };
82
- let document = {};
83
- let original;
84
- try {
85
- original = await readFile(transactionPath, "utf8");
86
- document = objectSchema.parse(parseToml(original));
87
- }
88
- catch (cause) {
89
- if (!isMissing(cause))
90
- return { status: "failed", reason: "readback" };
91
- }
92
- let servers;
93
- try {
94
- servers = parseOptionalObject(document.mcp_servers);
95
- }
96
- catch {
97
- return { status: "failed", reason: "readback" };
98
- }
99
- const desired = clientConfigurationDesired(client, normalizeProviderEnvironment(environment), command);
100
- if (sameConfiguration(servers[PRODUCT_IDENTITY.mcpServerKey], desired))
101
- return { status: "unchanged" };
102
- const backupPath = original === undefined ? undefined : `${client.configPath}.rea.backup`;
103
- if (backupPath !== undefined &&
104
- !(await preserveConfigBackup(transactionPath, backupPath)))
105
- return { status: "failed", reason: "backup" };
106
- document.mcp_servers = {
107
- ...servers,
108
- [PRODUCT_IDENTITY.mcpServerKey]: desired,
109
- };
110
- try {
111
- await mkdir(dirname(client.configPath), { recursive: true });
112
- await writeFileAtomic(transactionPath, stringifyToml(document), {
113
- encoding: "utf8",
114
- mode: 0o600,
115
- });
116
- const readback = objectSchema.parse(parseToml(await readFile(transactionPath, "utf8")));
117
- if (!sameConfiguration(parseOptionalObject(readback.mcp_servers)[PRODUCT_IDENTITY.mcpServerKey], desired))
118
- throw new Error("TOML readback mismatch");
119
- }
120
- catch {
121
- await restoreConfig(transactionPath, original);
122
- return { status: "failed", reason: "readback" };
123
- }
124
- return {
125
- status: "configured",
126
- ...(backupPath === undefined ? {} : { backupPath }),
127
- };
128
- };
129
76
  /** Determine whether an existing client configuration matches the desired registration. */
130
77
  export const clientConfigurationAligned = async (client, providerEnvironment, command) => {
131
78
  const desired = clientConfigurationDesired(client, providerEnvironment, command);
132
79
  try {
133
80
  const original = await readFile(client.configPath, "utf8");
134
- const document = client.format === "toml"
135
- ? objectSchema.parse(parseToml(original))
136
- : parseObject(original);
137
- const servers = parseOptionalObject(client.format === "toml" ? document.mcp_servers : document.mcpServers);
138
- return sameConfiguration(servers[PRODUCT_IDENTITY.mcpServerKey], desired);
81
+ const { servers } = parseClientConfiguration(original, client.format);
82
+ return clientConfigurationValuesEqual(servers[PRODUCT_IDENTITY.mcpServerKey], desired);
139
83
  }
140
84
  catch {
141
85
  return false;
@@ -165,11 +109,8 @@ export const inspectClientConfiguration = async (client, providerEnvironment, co
165
109
  }
166
110
  const desired = clientConfigurationDesired(client, providerEnvironment, command);
167
111
  try {
168
- const document = client.format === "toml"
169
- ? objectSchema.parse(parseToml(original))
170
- : parseObject(original);
171
- const servers = parseOptionalObject(client.format === "toml" ? document.mcp_servers : document.mcpServers);
172
- if (sameConfiguration(servers[PRODUCT_IDENTITY.mcpServerKey], desired))
112
+ const { servers } = parseClientConfiguration(original, client.format);
113
+ if (clientConfigurationValuesEqual(servers[PRODUCT_IDENTITY.mcpServerKey], desired))
173
114
  return { status: "already_current" };
174
115
  }
175
116
  catch {
@@ -183,11 +124,7 @@ export const inspectClientConfiguration = async (client, providerEnvironment, co
183
124
  backupPath: `${client.configPath}.rea.backup`,
184
125
  };
185
126
  };
186
- const objectSchema = z.record(z.string(), z.unknown());
187
- const parseOptionalObject = (value) => value === undefined ? {} : objectSchema.parse(value);
188
- const parseObject = (text) => objectSchema.parse(JSON.parse(text));
189
127
  const isMissing = (cause) => cause instanceof Error && "code" in cause && cause.code === "ENOENT";
190
- const sameConfiguration = (left, right) => JSON.stringify(left) === JSON.stringify(right);
191
128
  const preserveConfigBackup = async (source, destination) => {
192
129
  try {
193
130
  await copyFile(source, destination, fsConstants.COPYFILE_EXCL);
@@ -221,6 +158,3 @@ const clientConfigurationDesired = (client, providerEnvironment, command) => {
221
158
  ...(Object.keys(environment).length === 0 ? {} : { env: environment }),
222
159
  };
223
160
  };
224
- const normalizeProviderEnvironment = (environment) => typeof environment === "string"
225
- ? { HOPPER_LAUNCHER_PATH: environment }
226
- : environment;
@@ -1,10 +1,3 @@
1
- /** Select explicit non-secret permission settings safe for managed MCP registrations. */
2
- export const registrationPermissionEnvironment = (environment) => {
3
- const investigationRoots = environment.REA_INVESTIGATION_INPUT_ROOTS_JSON;
4
- return investigationRoots === undefined
5
- ? {}
6
- : { REA_INVESTIGATION_INPUT_ROOTS_JSON: investigationRoots };
7
- };
8
1
  /** Select exact non-secret settings published by available providers. */
9
2
  export const providerRegistrationEnvironment = (inspections) => Object.fromEntries(inspections
10
3
  .filter(({ available }) => available)
@@ -0,0 +1,119 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { lstat, mkdtemp, open, readdir, rename, rm, rmdir, unlink, } from "node:fs/promises";
3
+ import { dirname, join } from "node:path";
4
+ import { readBoundedFileBytes } from "../process/BoundedFileBytes.js";
5
+ class StoreFileLockOccupied extends Error {
6
+ code = "EEXIST";
7
+ constructor(cause) {
8
+ super("Store transaction lock is occupied", { cause });
9
+ }
10
+ }
11
+ /** Atomically publish a populated directory so another owner cannot replace a live lock. */
12
+ export const createStoreFileLock = async (path) => {
13
+ if (await exists(path))
14
+ throw new StoreFileLockOccupied();
15
+ const staged = await mkdtemp(join(dirname(path), ".rea-store-lock-"));
16
+ const owner = `owner-${randomUUID()}`;
17
+ try {
18
+ const handle = await open(join(staged, owner), "wx", 0o600);
19
+ try {
20
+ await handle.writeFile(`${String(process.pid)}\n`, "utf8");
21
+ await handle.sync();
22
+ }
23
+ finally {
24
+ await handle.close();
25
+ }
26
+ try {
27
+ // Rename cannot replace a nonempty directory: the owner entry is present before publication.
28
+ await rename(staged, path);
29
+ }
30
+ catch (cause) {
31
+ if (await exists(path))
32
+ throw new StoreFileLockOccupied(cause);
33
+ throw cause;
34
+ }
35
+ return {
36
+ release: async () => {
37
+ await removeOwner(path, owner).catch(() => undefined);
38
+ },
39
+ };
40
+ }
41
+ finally {
42
+ await rm(staged, { recursive: true, force: true });
43
+ }
44
+ };
45
+ /** Recover a dead owner's directory lock or a legacy PID file; leave live and unknown owners intact. */
46
+ export const removeStaleStoreFileLock = async (path) => {
47
+ try {
48
+ const stats = await lstat(path);
49
+ if (stats.isFile()) {
50
+ if (!(await ownerIsDead(path)))
51
+ return false;
52
+ await unlink(path);
53
+ return true;
54
+ }
55
+ if (!stats.isDirectory())
56
+ return false;
57
+ const entries = await readdir(path);
58
+ if (entries.length === 0) {
59
+ await rmdir(path);
60
+ return true;
61
+ }
62
+ const owner = entries[0];
63
+ if (entries.length !== 1 ||
64
+ owner === undefined ||
65
+ !/^owner-[a-f0-9]{8}(?:-[a-f0-9]{4}){3}-[a-f0-9]{12}$/u.test(owner) ||
66
+ !(await ownerIsDead(join(path, owner))))
67
+ return false;
68
+ await removeOwner(path, owner);
69
+ return true;
70
+ }
71
+ catch {
72
+ return false;
73
+ }
74
+ };
75
+ const removeOwner = async (path, owner) => {
76
+ // A successor has a different entry, so stale cleanup cannot make its directory empty.
77
+ await unlink(join(path, owner));
78
+ await rmdir(path);
79
+ };
80
+ const ownerIsDead = async (path) => {
81
+ const stats = await lstat(path);
82
+ if (!stats.isFile() || stats.size > 32)
83
+ return false;
84
+ const handle = await open(path, "r");
85
+ let bytes;
86
+ try {
87
+ bytes = await readBoundedFileBytes(handle, 32);
88
+ }
89
+ finally {
90
+ await handle.close();
91
+ }
92
+ const encoded = bytes?.toString("utf8").trim();
93
+ return (encoded !== undefined &&
94
+ /^[1-9][0-9]{0,9}$/u.test(encoded) &&
95
+ !processIsAlive(Number(encoded)));
96
+ };
97
+ const exists = async (path) => {
98
+ try {
99
+ await lstat(path);
100
+ return true;
101
+ }
102
+ catch (cause) {
103
+ if (errorCode(cause) === "ENOENT")
104
+ return false;
105
+ throw cause;
106
+ }
107
+ };
108
+ const processIsAlive = (pid) => {
109
+ try {
110
+ process.kill(pid, 0);
111
+ return true;
112
+ }
113
+ catch (cause) {
114
+ return errorCode(cause) !== "ESRCH";
115
+ }
116
+ };
117
+ const errorCode = (cause) => typeof cause === "object" && cause !== null && "code" in cause
118
+ ? cause.code
119
+ : undefined;
@@ -4,8 +4,8 @@ const require = createRequire(import.meta.url);
4
4
  const HeadlessPackage = require("@xterm/headless");
5
5
  // SAFETY: the addon package is pinned with the compatible headless xterm release.
6
6
  const SerializePackage = require("@xterm/addon-serialize");
7
- /** Owns one headless terminal and serializes writes into deterministic frames. */
8
7
  /**
8
+ * Owns one headless terminal and serializes writes into deterministic frames.
9
9
  * Reconstructs bounded terminal states while raw PTY chunks remain authoritative.
10
10
  *
11
11
  * Rendered frames answer what an operator saw after control-sequence handling;
@@ -71,8 +71,7 @@ export class TerminalRenderer {
71
71
  const serializedState = this.options.normalize(this.#serializeAddon.serialize());
72
72
  const bytes = Buffer.byteLength(serializedState) +
73
73
  lines.reduce((total, line) => total + Buffer.byteLength(line), 0);
74
- if (this.#frames.length >= this.options.maxFrames ||
75
- this.#capturedBytes + bytes > this.options.maxBytes) {
74
+ if (this.#capturedBytes + bytes > this.options.maxBytes) {
76
75
  this.#truncated = true;
77
76
  return;
78
77
  }
@@ -1,7 +1,7 @@
1
+ import { parseClientConfiguration, serializeClientConfiguration, } from "./ClientConfigurationDocument.js";
1
2
  import { copyFile, lstat, readFile, realpath, rm } from "node:fs/promises";
2
3
  import { homedir } from "node:os";
3
4
  import { basename, isAbsolute, join } from "node:path";
4
- import { parse as parseToml, stringify as stringifyToml } from "smol-toml";
5
5
  import writeFileAtomic from "write-file-atomic";
6
6
  import { z } from "zod";
7
7
  import { PRODUCT_IDENTITY } from "../identity.js";
@@ -65,9 +65,11 @@ const removeClient = async (client, fileSystem) => {
65
65
  let key;
66
66
  let servers;
67
67
  try {
68
- document = objectSchema.parse(client.format === "toml" ? parseToml(original) : JSON.parse(original));
69
- key = client.format === "toml" ? "mcp_servers" : "mcpServers";
70
- servers = optionalObject(document[key]);
68
+ ({
69
+ document,
70
+ servers,
71
+ serversKey: key,
72
+ } = parseClientConfiguration(original, client.format));
71
73
  }
72
74
  catch {
73
75
  return item(client.name, "failed", `Configuration is not valid ${client.format === "toml" ? "TOML" : "JSON"} and was not changed. Repair it, then rerun uninstall.`);
@@ -88,14 +90,9 @@ const removeClient = async (client, fileSystem) => {
88
90
  return item(client.name, "failed", "Configuration could not be backed up, so no change was made. Check file permissions, then rerun uninstall.");
89
91
  }
90
92
  try {
91
- const encoded = client.format === "toml"
92
- ? stringifyToml(document)
93
- : `${JSON.stringify(document, null, 2)}\n`;
94
- await fileSystem.writeText(transactionPath, encoded);
95
- const readback = objectSchema.parse(client.format === "toml"
96
- ? parseToml(await fileSystem.readText(transactionPath))
97
- : JSON.parse(await fileSystem.readText(transactionPath)));
98
- if (PRODUCT_IDENTITY.mcpServerKey in optionalObject(readback[key]))
93
+ await fileSystem.writeText(transactionPath, serializeClientConfiguration(document, client.format));
94
+ const readback = parseClientConfiguration(await fileSystem.readText(transactionPath), client.format);
95
+ if (PRODUCT_IDENTITY.mcpServerKey in readback.servers)
99
96
  throw new Error("registration readback mismatch");
100
97
  return item(client.name, "removed", `Removed registration from ${client.configPath}.`);
101
98
  }
@@ -154,8 +151,6 @@ const removeManagedPath = async (path, name, fileSystem) => {
154
151
  };
155
152
  const removeManagedSkills = async (home, fileSystem) => removeManagedPath(join(home, ".agents/skills", PRODUCT_IDENTITY.skillName), "skill", fileSystem);
156
153
  const item = (name, status, detail) => ({ name, status, detail });
157
- const objectSchema = z.record(z.string(), z.unknown());
158
- const optionalObject = (value) => value === undefined ? {} : objectSchema.parse(value);
159
154
  const registrationSchema = z
160
155
  .object({ command: z.string(), args: z.array(z.string()) })
161
156
  .passthrough();
@@ -7,7 +7,7 @@ export const UNKNOWN_REGISTRY_PROVIDER = {
7
7
  };
8
8
  /** Create immutable evidence for one approved residual-unknown mutation. */
9
9
  export const unknownMutationEvidence = (target, input) => createEvidence(target, UNKNOWN_REGISTRY_PROVIDER, {
10
- predicateType: "rea.residual-unknown-mutation/v1",
10
+ predicateType: "rea.residual-unknown-mutation",
11
11
  operation: "record_unknown",
12
12
  parameters: { domain: input.domain, severity: input.severity },
13
13
  result: {
@@ -2,6 +2,7 @@ import { constants } from "node:fs";
2
2
  import { mkdtemp, rm, symlink, writeFile } from "node:fs/promises";
3
3
  import { tmpdir } from "node:os";
4
4
  import { join } from "node:path";
5
+ import { windowsNativeCapabilities, } from "../process/WindowsAuthority.js";
5
6
  import { probeProcessCaptureCapability, } from "./ProcessCaptureCapability.js";
6
7
  /** Probe named prerequisites without converting missing controls into support. */
7
8
  export const probeWindowsCapabilities = async (dependencies = systemDependencies()) => {
@@ -17,11 +18,11 @@ export const probeWindowsCapabilities = async (dependencies = systemDependencies
17
18
  no_follow_open: dependencies.probeNoFollowOpen(),
18
19
  private_acl: dependencies.probePrivateAcl(),
19
20
  unix_domain_socket: dependencies.probeUnixDomainSocket(),
20
- pty: {
21
- available: pty.available,
22
- reason: pty.available ? null : pty.reason,
23
- },
21
+ pty: pty.available
22
+ ? { available: true, reason: null }
23
+ : { available: false, reason: pty.reason },
24
24
  },
25
+ security: windowsNativeCapabilities(dependencies.platform),
25
26
  };
26
27
  };
27
28
  const systemDependencies = () => ({
@@ -1,9 +1,8 @@
1
- import { Buffer } from "node:buffer";
2
1
  import { posix } from "node:path";
3
- import { ArtifactReaderFailure, } from "./ArtifactReader.js";
2
+ import { ArtifactReaderFailure } from "./ArtifactReader.js";
4
3
  const DRIVE_OR_UNC = /^(?:[A-Za-z]:|\\|\/\/)/u;
5
4
  /** Normalize an untrusted logical archive path without touching filesystem. */
6
- export const normalizeArtifactPath = (input, limits) => {
5
+ export const normalizeArtifactPath = (input) => {
7
6
  if (input.includes("\0") ||
8
7
  input.includes("\\") ||
9
8
  input.startsWith("/") ||
@@ -13,8 +12,6 @@ export const normalizeArtifactPath = (input, limits) => {
13
12
  const parts = normalized.split("/");
14
13
  if (normalized.length === 0 ||
15
14
  parts.some((part) => part === "" || part === "." || part === "..") ||
16
- parts.length > limits.maxDepth ||
17
- Buffer.byteLength(normalized, "utf8") > limits.maxPathBytes ||
18
15
  posix.normalize(normalized) !== normalized)
19
16
  throw new ArtifactReaderFailure("path", "Artifact path is not normalized");
20
17
  return normalized;
@@ -1,13 +1,16 @@
1
1
  import { createAnalysisExecution, } from "../application/AnalysisProvider.js";
2
2
  import { inventoryArtifact } from "../application/ArtifactInventory.js";
3
3
  import { extractArtifact } from "../application/ArtifactExtraction.js";
4
- import { ARTIFACT_TOOL_CONTRACTS, artifactInspectionInputSchema, artifactInventoryInputSchema, artifactExtractionInputSchema, } from "../contracts/artifactToolContracts.js";
4
+ import { analyzeInterfaceBuilderBundle } from "../application/InterfaceBuilderAnalysis.js";
5
+ import { ARTIFACT_ANALYSIS_OPERATIONS, artifactInventoryInputSchema, artifactExtractionExecutionSchema, } from "../contracts/artifactToolContracts.js";
5
6
  import { AnalysisCapabilityUnavailableError, ArtifactOperationError, } from "../domain/errors.js";
7
+ import { interfaceBuilderLimitsSchema } from "../domain/interfaceBuilderGraph.js";
6
8
  import { err, ok } from "../domain/result.js";
7
- import { ArtifactReaderFailure, } from "./ArtifactReader.js";
9
+ import { ArtifactReaderFailure } from "./ArtifactReader.js";
8
10
  import { ARTIFACT_GRAPH_PROVIDER } from "../application/InvestigationProviders.js";
9
11
  import { createEvidence } from "../domain/evidence.js";
10
12
  import { createArtifactInspection } from "../domain/artifactInspection.js";
13
+ import { resolveArtifactIntegrityPolicy, resolveNativeMountPolicy, } from "../application/ArtifactInventory/policy.js";
11
14
  const IDENTITY = Object.freeze(ARTIFACT_GRAPH_PROVIDER);
12
15
  /** Read-only inventory and exclusively owned extraction provider. */
13
16
  export class ArtifactProvider {
@@ -17,31 +20,20 @@ export class ArtifactProvider {
17
20
  this.nativeMountEnabled = nativeMountEnabled;
18
21
  this.integrityContinueEnabled = integrityContinueEnabled;
19
22
  }
20
- #capabilities = Object.freeze(ARTIFACT_TOOL_CONTRACTS.map((contract) => Object.freeze({
23
+ #capabilities = Object.freeze(ARTIFACT_ANALYSIS_OPERATIONS.map((operation) => Object.freeze({
21
24
  provider: IDENTITY,
22
- operation: contract.name,
23
- inputContractVersion: 1,
24
- outputContractVersion: 1,
25
+ operation,
25
26
  available: true,
26
27
  reason: null,
27
- pagination: contract.name === "inspect_artifact"
28
- ? "none"
29
- : "offset",
30
- exhaustive: false,
31
28
  effects: Object.freeze({
32
29
  mutatesArtifact: false,
33
- launchesProcess: true,
30
+ launchesProcess: operation !== "decode_interface_builder",
34
31
  mayShowUi: false,
35
32
  mayAccessNetwork: false,
36
- mayWriteFilesystem: contract.name === "extract_artifact",
33
+ mayWriteFilesystem: operation === "extract_artifact",
37
34
  changesPermissions: false,
38
35
  requiresRoot: false,
39
36
  }),
40
- limits: Object.freeze({
41
- maxResults: 500,
42
- maxPayloadBytes: 4 * 1024 * 1024,
43
- timeoutMs: 120_000,
44
- }),
45
37
  limitations: Object.freeze([
46
38
  "DMG child inventory is macOS-only and requires per-call approval plus operator policy; PKG remains root-hash-only.",
47
39
  "ASAR files discovered in filesystem-backed inventories are expanded without bulk extraction; other nested containers remain recorded only.",
@@ -76,22 +68,38 @@ class ArtifactClient {
76
68
  const inspected = await this.inspectArtifact(parameters, options);
77
69
  return inspected;
78
70
  }
71
+ if (operation === "decode_interface_builder") {
72
+ if (this.target.kind !== "executable" ||
73
+ this.target.sourcePath === undefined ||
74
+ !this.target.sourcePath.toLowerCase().endsWith(".app"))
75
+ throw new ArtifactReaderFailure("unavailable", "decode_interface_builder requires an active .app bundle target");
76
+ const limits = interfaceBuilderLimitsSchema.parse(parameters);
77
+ const result = await analyzeInterfaceBuilderBundle({
78
+ bundlePath: this.target.sourcePath,
79
+ targetSha256: this.target.sha256,
80
+ limits,
81
+ ...(options?.signal === undefined ? {} : { signal: options.signal }),
82
+ });
83
+ return ok(createAnalysisExecution(result, IDENTITY, {
84
+ limitations: result.limitations,
85
+ locations: result.documents.map(({ relative_path: path }) => ({
86
+ kind: "artifact-path",
87
+ path,
88
+ })),
89
+ }));
90
+ }
79
91
  if (operation === "extract_artifact") {
80
- const parsed = artifactExtractionInputSchema.parse(parameters);
92
+ const parsed = artifactExtractionExecutionSchema.parse(parameters);
81
93
  const result = await extractArtifact({
82
94
  inputPath: this.target.sourcePath ?? this.target.path,
83
95
  inputFormat: this.target.format,
84
96
  outputRoot: parsed.output_root,
85
- occurrenceIds: parsed.occurrence_ids,
86
- offset: parsed.offset,
87
- limit: parsed.limit,
88
- limits: limitsFrom(parsed),
89
97
  }, options?.signal);
90
98
  return ok(createAnalysisExecution(result, IDENTITY, {
91
99
  rawResult: null,
92
100
  limitations: result.limitations,
93
101
  subject: subjectFor(this.target.sourcePath ?? this.target.path, result.manifest),
94
- locations: result.artifacts.items.map(({ relative_path: path }) => ({
102
+ locations: result.artifacts.map(({ relative_path: path }) => ({
95
103
  kind: "artifact-path",
96
104
  path,
97
105
  })),
@@ -103,7 +111,7 @@ class ArtifactClient {
103
111
  rawResult: null,
104
112
  limitations: result.limitations,
105
113
  subject: subjectFor(this.target.sourcePath ?? this.target.path, result.manifest),
106
- locations: result.occurrences.items.map(({ logical_path: path }) => ({
114
+ locations: result.occurrences.map(({ logical_path: path }) => ({
107
115
  kind: "artifact-path",
108
116
  path,
109
117
  })),
@@ -117,24 +125,11 @@ class ArtifactClient {
117
125
  return Promise.resolve();
118
126
  }
119
127
  async inspectArtifact(parameters, options) {
120
- const parsed = artifactInspectionInputSchema.parse(parameters);
128
+ const parsed = artifactInventoryInputSchema.parse(parameters);
121
129
  const inventoryParameters = artifactInventoryInputSchema.parse({
122
- node_offset: 0,
123
- node_limit: parsed.max_observations,
124
- occurrence_offset: 0,
125
- occurrence_limit: parsed.max_observations,
126
- edge_offset: 0,
127
- edge_limit: parsed.max_relationships,
128
130
  native_mount_approved: parsed.native_mount_approved,
129
131
  integrity_policy: parsed.integrity_policy,
130
132
  integrity_continue_approved: parsed.integrity_continue_approved,
131
- max_integrity_mismatches: parsed.max_integrity_mismatches,
132
- max_entries: parsed.max_entries,
133
- max_total_bytes: parsed.max_total_bytes,
134
- max_entry_bytes: parsed.max_entry_bytes,
135
- max_compression_ratio: parsed.max_compression_ratio,
136
- max_depth: parsed.max_depth,
137
- max_path_bytes: parsed.max_path_bytes,
138
133
  });
139
134
  await options?.progress?.report({
140
135
  phase: "inspect_artifact.inventory",
@@ -144,7 +139,7 @@ class ArtifactClient {
144
139
  });
145
140
  const inventory = await this.inventory(inventoryParameters, options);
146
141
  const subject = subjectFor(this.target.sourcePath ?? this.target.path, inventory.manifest);
147
- const locations = inventory.occurrences.items.map(({ logical_path: path }) => ({
142
+ const locations = inventory.occurrences.map(({ logical_path: path }) => ({
148
143
  kind: "artifact-path",
149
144
  path,
150
145
  }));
@@ -156,7 +151,7 @@ class ArtifactClient {
156
151
  limitations: inventory.limitations,
157
152
  locations,
158
153
  });
159
- const result = createArtifactInspection(inventoryEvidence, parsed);
154
+ const result = createArtifactInspection(inventoryEvidence);
160
155
  await options?.progress?.report({
161
156
  phase: "inspect_artifact.inventory",
162
157
  completed: 1,
@@ -171,37 +166,18 @@ class ArtifactClient {
171
166
  }));
172
167
  }
173
168
  inventory(parsed, options) {
174
- return inventoryArtifact(this.target.sourcePath ?? this.target.path, limitsFrom(parsed), {
175
- nodeOffset: parsed.node_offset,
176
- nodeLimit: parsed.node_limit,
177
- occurrenceOffset: parsed.occurrence_offset,
178
- occurrenceLimit: parsed.occurrence_limit,
179
- edgeOffset: parsed.edge_offset,
180
- edgeLimit: parsed.edge_limit,
181
- }, {
169
+ return inventoryArtifact(this.target.sourcePath ?? this.target.path, {
182
170
  ...(options?.signal === undefined ? {} : { signal: options.signal }),
183
- nativeMount: {
184
- nativeMountApproved: parsed.native_mount_approved === true,
185
- nativeMountEnabled: this.nativeMountEnabled,
186
- },
187
- integrity: {
188
- mode: parsed.integrity_policy,
189
- approved: parsed.integrity_continue_approved === true,
190
- enabled: this.integrityContinueEnabled,
191
- maxMismatches: parsed.max_integrity_mismatches,
192
- },
171
+ nativeMount: resolveNativeMountPolicy(parsed.native_mount_approved === true, this.nativeMountEnabled),
172
+ integrity: resolveArtifactIntegrityPolicy(parsed.integrity_policy === "fail"
173
+ ? { mode: "fail" }
174
+ : {
175
+ mode: parsed.integrity_policy,
176
+ }, this.integrityContinueEnabled),
193
177
  });
194
178
  }
195
179
  }
196
- const limitsFrom = (input) => ({
197
- maxEntries: input.max_entries,
198
- maxTotalBytes: input.max_total_bytes,
199
- maxEntryBytes: input.max_entry_bytes,
200
- maxCompressionRatio: input.max_compression_ratio,
201
- maxDepth: input.max_depth,
202
- maxPathBytes: input.max_path_bytes,
203
- });
204
- const isArtifactOperation = (operation) => ARTIFACT_TOOL_CONTRACTS.some(({ name }) => name === operation);
180
+ const isArtifactOperation = (operation) => ARTIFACT_ANALYSIS_OPERATIONS.includes(operation);
205
181
  const translateFailure = (operation, cause) => {
206
182
  if (cause instanceof ArtifactReaderFailure)
207
183
  return new ArtifactOperationError(operation, cause.reason, cause.details);