rea-agents 6.0.0 → 6.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 (611) hide show
  1. package/README.md +26 -18
  2. package/bridge/android/ReaJadxBridge.java +14 -5
  3. package/bridge/ghidra/ReaGhidraBridge.java +205 -51
  4. package/bridge/hopper_bridge.py +314 -127
  5. package/bridge/mitmproxy/capture.py +0 -2
  6. package/bridge/native/rea_lldb_tracer.py +630 -94
  7. package/bridge/process/ProcessRunTokenReader.swift +39 -5
  8. package/bridge/pwntools/recorded_crash_impl.py +4 -0
  9. package/dist/android/JadxConfiguration.js +274 -31
  10. package/dist/android/JadxMcpTransport.js +18 -2
  11. package/dist/android/JadxProtocol.js +6 -0
  12. package/dist/android/JadxProvider.js +76 -37
  13. package/dist/android/JadxSession.js +23 -4
  14. package/dist/application/AnalysisContextQueries.js +8 -35
  15. package/dist/application/AnalysisDocument.js +32 -0
  16. package/dist/application/AppBundleExecutable.js +67 -21
  17. package/dist/application/BinaryTargetResolver.js +5 -3
  18. package/dist/application/BrowserEvidence.js +3 -8
  19. package/dist/application/BrowserScenarioEvidence.js +2 -18
  20. package/dist/application/CallPathTracing.js +19 -3
  21. package/dist/application/CapabilityInventory.js +48 -11
  22. package/dist/application/ClientConfigurationDocument.js +917 -8
  23. package/dist/application/ClientRegistrationIdentity.js +26 -5
  24. package/dist/application/ClientRegistrationStatus.js +29 -14
  25. package/dist/application/DirectAnalysis.js +56 -51
  26. package/dist/application/DirectAnalysisCleanup.js +72 -0
  27. package/dist/application/DirectAnalysisStatus.js +4 -5
  28. package/dist/application/Doctor.js +19 -21
  29. package/dist/application/DoctorDiagnostics.js +1 -2
  30. package/dist/application/DoctorScope.js +25 -13
  31. package/dist/application/EnhancedLiteralTracing.js +22 -25
  32. package/dist/application/EnhancedTools.js +64 -17
  33. package/dist/application/EvidenceBundleFiles.js +30 -13
  34. package/dist/application/FunctionAnalysisEvidence.js +2 -3
  35. package/dist/application/InventoryProjectionEvidence.js +4 -3
  36. package/dist/application/InvestigationProviders.js +11 -2
  37. package/dist/application/JsonFiles.js +83 -28
  38. package/dist/application/LinuxHopper.js +9 -6
  39. package/dist/application/MacHopper.js +15 -18
  40. package/dist/application/ProcedureAddressResolution.js +11 -0
  41. package/dist/application/RealHopperAssertions.js +0 -11
  42. package/dist/application/ReconstructionCoverageService.js +7 -4
  43. package/dist/application/ReconstructionObligationCandidates.js +1 -1
  44. package/dist/application/ReconstructionObligationLedgerService.js +4 -3
  45. package/dist/application/ReferenceSourceImportEntries.js +1 -1
  46. package/dist/application/Setup.js +21 -17
  47. package/dist/application/SetupClientConfiguration.js +10 -15
  48. package/dist/application/SetupHost.js +21 -29
  49. package/dist/application/SetupPlan.js +11 -9
  50. package/dist/application/SupportedClients.js +34 -1
  51. package/dist/application/Uninstall.js +82 -29
  52. package/dist/application/Update.js +18 -3
  53. package/dist/application/UpdateMaintenance.js +7 -5
  54. package/dist/application/UpdateRuntime.js +57 -36
  55. package/dist/application/WebModuleTraceService.js +4 -2
  56. package/dist/application/WebNetworkCaptureService.js +4 -2
  57. package/dist/application/WebRuntimeService.js +5 -3
  58. package/dist/application/WebScriptExportService.js +32 -6
  59. package/dist/application/WebSourceLocationService.js +4 -2
  60. package/dist/application/WorkflowEvidence.js +105 -0
  61. package/dist/application/XrefsAddressResolution.js +45 -0
  62. package/dist/application/analysisView/AnalysisViewService.js +76 -0
  63. package/dist/application/binary/AnalysisClientCleanup.js +30 -5
  64. package/dist/application/binary/AnalysisProviderEvaluation.js +22 -7
  65. package/dist/application/binary/AnalysisProviderRegistry.js +4 -6
  66. package/dist/application/binary/AnalysisSnapshotCache.js +13 -14
  67. package/dist/application/binary/BinarySession.js +161 -93
  68. package/dist/application/binary/BinarySessionComposition.js +1 -3
  69. package/dist/application/binary/BinarySessionExecution.js +3 -5
  70. package/dist/application/binary/BinarySessionOpen.js +4 -4
  71. package/dist/application/binary/BinarySessionRecords.js +26 -4
  72. package/dist/application/binary/BinarySessionStatus.js +18 -7
  73. package/dist/application/binary/CompositeProvider.js +16 -17
  74. package/dist/application/binary/LazyAnalysisProvider.js +8 -5
  75. package/dist/application/binary/SessionProviderRouter.js +27 -135
  76. package/dist/application/binaryDiagnostics/BinaryLayoutService.js +4 -2
  77. package/dist/application/binaryDiagnostics/RecordedCrashService.js +4 -2
  78. package/dist/application/evm/EvmInterfaceService.js +4 -2
  79. package/dist/application/homebrew.js +48 -0
  80. package/dist/application/investigation/EvidenceLedger.js +21 -7
  81. package/dist/application/investigation/InvestigationRecords.js +8 -0
  82. package/dist/application/javascript/ElectronActiveEvidence.js +9 -13
  83. package/dist/application/javascript/JavaScriptAnalysisControl.js +34 -0
  84. package/dist/application/javascript/JavaScriptApplicationEvidence.js +21 -4
  85. package/dist/application/javascript/JavaScriptApplicationEvidenceGraph.js +19 -2
  86. package/dist/application/javascript/JavaScriptApplicationService.js +27 -15
  87. package/dist/application/javascript/JavaScriptApplicationWorkflowService.js +5 -5
  88. package/dist/application/javascript/JavaScriptArtifactAnalysis.js +10 -7
  89. package/dist/application/javascript/JavaScriptArtifactGraphBuilder.js +44 -10
  90. package/dist/application/javascript/JavaScriptArtifactGraphBundlers.js +11 -3
  91. package/dist/application/javascript/JavaScriptArtifactGraphContext.js +9 -0
  92. package/dist/application/javascript/JavaScriptArtifactGraphDocuments.js +8 -5
  93. package/dist/application/javascript/JavaScriptArtifactGraphFindings.js +12 -3
  94. package/dist/application/javascript/JavaScriptArtifactGraphStructure.js +0 -1
  95. package/dist/application/javascript/JavaScriptArtifactPathResolution.js +49 -19
  96. package/dist/application/javascript/JavaScriptArtifactReconstruction.js +56 -8
  97. package/dist/application/javascript/JavaScriptModuleRelationships.js +38 -9
  98. package/dist/application/javascript/JavaScriptRecoveryService.js +4 -2
  99. package/dist/application/javascript/JavaScriptRuntimeObservationService.js +6 -4
  100. package/dist/application/javascript/JavaScriptRuntimeReconciliationService.js +3 -3
  101. package/dist/application/javascript/JavaScriptSemanticGraphAsyncProjection.js +2 -3
  102. package/dist/application/javascript/JavaScriptSemanticGraphBuilder.js +63 -61
  103. package/dist/application/javascript/JavaScriptSemanticGraphChildProcessProjection.js +1 -2
  104. package/dist/application/javascript/JavaScriptSemanticGraphDataProjection.js +2 -3
  105. package/dist/application/javascript/JavaScriptSemanticGraphFlowProjection.js +1 -5
  106. package/dist/application/javascript/JavaScriptSemanticGraphObjectProjection.js +75 -46
  107. package/dist/application/javascript/JavaScriptSemanticGraphResourceProjection.js +2 -3
  108. package/dist/application/javascript/JavaScriptSemanticGraphValueProjection.js +64 -19
  109. package/dist/application/managed/ManagedApplicationGraphService.js +4 -3
  110. package/dist/application/managed/ManagedMemberComparisonService.js +9 -5
  111. package/dist/application/managed/ManagedNativeVerificationService.js +6 -4
  112. package/dist/application/managed/ManagedReconstructionService.js +4 -3
  113. package/dist/application/process/ProcessCli.js +25 -17
  114. package/dist/application/process/ProcessEvidence.js +4 -4
  115. package/dist/application/workflowInputError.js +18 -0
  116. package/dist/artifacts/ArtifactProvider.js +48 -13
  117. package/dist/artifacts/ArtifactReader.js +31 -0
  118. package/dist/artifacts/DirectoryArtifactReader.js +2 -1
  119. package/dist/artifacts/MachOSliceArtifactReader.js +106 -15
  120. package/dist/artifacts/NativeDmgArtifactReader.js +73 -21
  121. package/dist/artifacts/SafeOutputTree.js +16 -2
  122. package/dist/artifacts/ZipArtifactReader.js +11 -4
  123. package/dist/artifacts/apple/AppleAssetCatalogAnalysis.js +26 -5
  124. package/dist/artifacts/apple/DylibResolutionReader.js +17 -7
  125. package/dist/artifacts/apple/InterfaceBuilderAnalysis.js +176 -56
  126. package/dist/artifacts/apple/InterfaceBuilderDecodeBudget.js +195 -0
  127. package/dist/artifacts/apple/KeyedArchiveReader.js +55 -23
  128. package/dist/artifacts/apple/MachoLoadCommandReader.js +92 -31
  129. package/dist/artifacts/apple/NibArchive.js +81 -14
  130. package/dist/artifacts/apple/NibViewHierarchy.js +10 -3
  131. package/dist/artifacts/apple/PlistNumberLiterals.js +164 -0
  132. package/dist/artifacts/extraction/ArtifactExtraction.js +78 -21
  133. package/dist/artifacts/inventory/ArtifactGraphConstruction.js +79 -68
  134. package/dist/artifacts/inventory/ArtifactInventory.js +0 -1
  135. package/dist/artifacts/inventory/reader.js +3 -3
  136. package/dist/artifacts/inventory/scanCanonical.js +59 -38
  137. package/dist/artifacts/inventory/scanReader.js +5 -9
  138. package/dist/artifacts/javascript/JavaScriptArtifactFiles.js +6 -2
  139. package/dist/browser/BrowserScenarioPartialObservation.js +106 -0
  140. package/dist/browser/CdpBrowserProvider.js +2 -3
  141. package/dist/browser/CdpCaptureCompleteness.js +2 -0
  142. package/dist/browser/CdpCaptureEventHandlers.js +78 -15
  143. package/dist/browser/CdpCaptureEventTypes.js +5 -1
  144. package/dist/browser/CdpCaptureEvents.js +25 -1
  145. package/dist/browser/CdpCaptureValues.js +20 -0
  146. package/dist/browser/CdpConnection.js +30 -11
  147. package/dist/browser/CdpElectronProvider.js +0 -2
  148. package/dist/browser/CdpElectronScriptEvents.js +2 -8
  149. package/dist/browser/CdpElectronScripts.js +2 -3
  150. package/dist/browser/CdpOptionalCommand.js +2 -3
  151. package/dist/browser/CdpPageCapture.js +23 -1
  152. package/dist/browser/CdpPageCaptureScripts.js +2 -3
  153. package/dist/browser/CdpSafeMetadata.js +10 -10
  154. package/dist/browser/PlaywrightBrowserScenarioProvider.js +59 -44
  155. package/dist/browser/PlaywrightElectronActiveActions.js +34 -79
  156. package/dist/browser/PlaywrightElectronActiveProjection.js +141 -0
  157. package/dist/browser/PlaywrightElectronActiveProvider.js +133 -130
  158. package/dist/browser/PlaywrightScenarioArtifacts.js +1 -1
  159. package/dist/browser/PlaywrightScenarioBrowser.js +139 -39
  160. package/dist/browser/PlaywrightScenarioEvents.js +1 -1
  161. package/dist/browser/PlaywrightScenarioSession.js +39 -22
  162. package/dist/browser/WebSourceMapFetcher.js +426 -72
  163. package/dist/browser/assets/LocalWebScriptArtifacts.js +2 -2
  164. package/dist/browser/assets/ScriptCaptureAdapters.js +1 -1
  165. package/dist/browser/history/CaptureFailures.js +41 -1
  166. package/dist/browser/history/CaptureRelease.js +5 -0
  167. package/dist/browser/history/HarCaptureAdapter.js +3 -3
  168. package/dist/browser/history/HarJson.js +3 -2
  169. package/dist/browser/history/HistoricalCaptureDecoder.js +4 -2
  170. package/dist/browser/history/MitmproxyCaptureAdapter.js +4 -2
  171. package/dist/catalogIdentity.js +0 -1
  172. package/dist/cli/analysisSelector.js +23 -0
  173. package/dist/cli/analysisViewCommands.js +36 -0
  174. package/dist/cli/applicationCommands.js +2 -3
  175. package/dist/cli/artifactCommands.js +11 -12
  176. package/dist/cli/coreAnalysisCommands.js +3 -3
  177. package/dist/cli/coreBinaryCommands.js +100 -37
  178. package/dist/cli/coreNativeCommands.js +9 -10
  179. package/dist/cli/electronCommands.js +10 -9
  180. package/dist/cli/interactiveSetup.js +6 -6
  181. package/dist/cli/javascriptApplicationAnalysis.js +7 -3
  182. package/dist/cli/jsonOutput.js +4 -99
  183. package/dist/cli/managedCommands.js +7 -8
  184. package/dist/cli/nativeCallCommands.js +3 -5
  185. package/dist/cli/omittableDefaults.js +50 -0
  186. package/dist/cli/processCommands.js +3 -2
  187. package/dist/cli/setupCommands.js +16 -15
  188. package/dist/cli/utilityCommands.js +9 -9
  189. package/dist/cli/webRuntimeCommands.js +8 -8
  190. package/dist/cli.js +18 -9
  191. package/dist/cliBrowserScenarioCommands.js +2 -2
  192. package/dist/cliCommandNames.js +1 -1
  193. package/dist/cliJsonInput.js +24 -5
  194. package/dist/cliOutput.js +0 -38
  195. package/dist/composition/auxiliaryAnalysisProviders.js +27 -23
  196. package/dist/composition/binary.js +9 -9
  197. package/dist/composition/browserScenario.js +2 -1
  198. package/dist/composition/directAnalysis.js +20 -13
  199. package/dist/composition/electronScenario.js +1 -1
  200. package/dist/composition/optionalObservationProviders.js +12 -7
  201. package/dist/config/environment.js +10 -0
  202. package/dist/config/ghidraStartupTimeout.js +12 -0
  203. package/dist/config/homeDirectory.js +12 -0
  204. package/dist/config/mcpResponseBudget.js +30 -0
  205. package/dist/config/parseConfig.js +8 -3
  206. package/dist/config/parsers.js +19 -22
  207. package/dist/contracts/analysisViewToolContracts.js +56 -0
  208. package/dist/contracts/applicationToolContracts.js +5 -4
  209. package/dist/contracts/artifactComparisonExample.js +2 -2
  210. package/dist/contracts/artifactToolContracts.js +1 -1
  211. package/dist/contracts/browserScenarioToolContracts.js +1 -1
  212. package/dist/contracts/browserToolContracts.js +19 -15
  213. package/dist/contracts/enhancedInputs.js +7 -5
  214. package/dist/contracts/enhancedToolContracts.js +7 -6
  215. package/dist/contracts/evm/evmToolContracts.js +1 -1
  216. package/dist/contracts/functionWorkflowToolContracts.js +1 -1
  217. package/dist/contracts/hopperMemoryContracts.js +2 -5
  218. package/dist/contracts/inputSchemaPresentation.js +90 -0
  219. package/dist/contracts/investigationExamples.js +4 -3
  220. package/dist/contracts/javascript/electronToolContracts.js +2 -2
  221. package/dist/contracts/javascript/javascriptApplicationWorkflowExamples.js +0 -20
  222. package/dist/contracts/javascript/javascriptExportShapeComparisonExample.js +245 -0
  223. package/dist/contracts/javascript/javascriptRuntimeObservationToolContracts.js +1 -1
  224. package/dist/contracts/managed/managedToolContracts.js +7 -14
  225. package/dist/contracts/managed/managedWorkflowToolContracts.js +1 -1
  226. package/dist/contracts/mobileApplicationGraphExamples.js +3 -3
  227. package/dist/contracts/native/binaryDiagnosticsToolContracts.js +1 -1
  228. package/dist/contracts/native/nativeToolContracts.js +5 -3
  229. package/dist/contracts/officialToolContracts.js +16 -16
  230. package/dist/contracts/promptContracts.js +5 -5
  231. package/dist/contracts/providerSelection.js +1 -1
  232. package/dist/contracts/sessionLifecycleInputs.js +3 -7
  233. package/dist/contracts/sessionStatusContract.js +2 -4
  234. package/dist/contracts/sessionToolContracts.js +18 -8
  235. package/dist/contracts/sessionToolSchemas.js +3 -19
  236. package/dist/contracts/toolContractExamples.js +0 -1
  237. package/dist/contracts/toolContractHelpers.js +4 -1
  238. package/dist/contracts/toolContracts.js +2 -0
  239. package/dist/contracts/toolEffects.js +1 -1
  240. package/dist/contracts/toolOutputSchemaGroups.js +160 -115
  241. package/dist/contracts/toolOutputSchemaPrimitives.js +28 -20
  242. package/dist/contracts/toolSchemaMetadata.js +41 -33
  243. package/dist/contracts/webNetworkCaptureToolContracts.js +2 -2
  244. package/dist/contracts/webRuntimeToolContracts.js +1 -1
  245. package/dist/contracts/webScriptToolContracts.js +1 -1
  246. package/dist/doctorRuntime.js +7 -5
  247. package/dist/domain/analysisErrorBase.js +8 -3
  248. package/dist/domain/analysisErrorCore.js +6 -1
  249. package/dist/domain/analysisErrorPresentation.js +90 -20
  250. package/dist/domain/analysisErrorProjection.js +130 -32
  251. package/dist/domain/analysisSnapshot.js +29 -31
  252. package/dist/domain/analysisView/analysisView.js +243 -0
  253. package/dist/domain/analysisView/analysisViewCoverage.js +19 -0
  254. package/dist/domain/analysisView/binaryLayoutView.js +159 -0
  255. package/dist/domain/analysisView/javascriptApplicationView.js +238 -0
  256. package/dist/domain/android/androidAnalysis.js +2 -4
  257. package/dist/domain/android/androidApplication.js +18 -10
  258. package/dist/domain/apple/appleApplication.js +42 -15
  259. package/dist/domain/apple/dyldEnvironment.js +73 -0
  260. package/dist/domain/apple/dylibResolution.js +130 -12
  261. package/dist/domain/apple/dylibResolutionFindings.js +9 -7
  262. package/dist/domain/apple/interfaceBuilderGraph.js +25 -14
  263. package/dist/domain/apple/interfaceBuilderKeyedArchive.js +13 -3
  264. package/dist/domain/apple/keyedArchive.js +35 -3
  265. package/dist/domain/apple/machoContainer.js +54 -0
  266. package/dist/domain/apple/plistNumbers.js +76 -0
  267. package/dist/domain/artifactComparison.js +15 -6
  268. package/dist/domain/artifactGraph.js +16 -3
  269. package/dist/domain/artifactIdentity.js +29 -0
  270. package/dist/domain/artifactInventoryEvidence.js +28 -40
  271. package/dist/domain/artifactOperationError.js +3 -3
  272. package/dist/domain/artifactPartialObservation.js +1 -0
  273. package/dist/domain/artifactPathSyntax.js +49 -0
  274. package/dist/domain/binaryTarget.js +39 -13
  275. package/dist/domain/bridgeCandidateProjection.js +71 -0
  276. package/dist/domain/browserCaptureComparison.js +13 -49
  277. package/dist/domain/browserCompleteness.js +1 -0
  278. package/dist/domain/browserNetworkEvidence.js +10 -4
  279. package/dist/domain/browserObservation.js +0 -1
  280. package/dist/domain/browserObservationError.js +24 -5
  281. package/dist/domain/browserObservationSchemas.js +14 -3
  282. package/dist/domain/browserScenario.js +0 -1
  283. package/dist/domain/browserScenarioCapture.js +1 -2
  284. package/dist/domain/browserScenarioDiff.js +0 -2
  285. package/dist/domain/browserScenarioDiffEvidence.js +0 -12
  286. package/dist/domain/browserScenarioDiffValues.js +2 -2
  287. package/dist/domain/browserScenarioValues.js +5 -10
  288. package/dist/domain/bundleComparison.js +3 -2
  289. package/dist/domain/callPath.js +8 -9
  290. package/dist/domain/callPathSchemas.js +2 -2
  291. package/dist/domain/canonicalJsonDigestSteps.js +133 -0
  292. package/dist/domain/canonicalOrdering.js +9 -5
  293. package/dist/domain/changedBehavior.js +9 -9
  294. package/dist/domain/comparisonSourceEvidence.js +40 -0
  295. package/dist/domain/completionLedgerGeneration.js +2 -1
  296. package/dist/domain/configurationErrors.js +13 -1
  297. package/dist/domain/conformancePackage.js +4 -3
  298. package/dist/domain/evidence.js +65 -36
  299. package/dist/domain/evidenceBundle.js +47 -8
  300. package/dist/domain/evidenceCompletionLedger.js +2 -1
  301. package/dist/domain/evidenceErrors.js +12 -1
  302. package/dist/domain/explicitSensitiveFailure.js +17 -1
  303. package/dist/domain/firmware/firmwareAnalysis.js +6 -7
  304. package/dist/domain/functionComparison.js +4 -5
  305. package/dist/domain/functionComparisonDimensions.js +120 -87
  306. package/dist/domain/functionComparisonNormalization.js +23 -34
  307. package/dist/domain/functionComparisonResults.js +1 -4
  308. package/dist/domain/functionComparisonSchemas.js +2 -8
  309. package/dist/domain/functionDossierEvidence.js +2 -37
  310. package/dist/domain/hopperErrors.js +23 -2
  311. package/dist/domain/hopperValues.js +51 -8
  312. package/dist/domain/immutableJson.js +114 -0
  313. package/dist/domain/inputIssueProjection.js +3 -0
  314. package/dist/domain/javascript/electronActiveObservation.js +47 -64
  315. package/dist/domain/javascript/electronObservation.js +14 -3
  316. package/dist/domain/javascript/electronStaticAnalysisBrowser.js +10 -9
  317. package/dist/domain/javascript/electronStaticAnalysisIpc.js +2 -1
  318. package/dist/domain/javascript/electronStaticAnalysisNative.js +2 -1
  319. package/dist/domain/javascript/electronStaticAnalysisValues.js +6 -12
  320. package/dist/domain/javascript/javascriptApplicationAnalysis.js +71 -23
  321. package/dist/domain/javascript/javascriptApplicationEvidenceSchemas.js +2 -0
  322. package/dist/domain/javascript/javascriptApplicationGraph.js +39 -3
  323. package/dist/domain/javascript/javascriptApplicationGraphSchemas.js +9 -2
  324. package/dist/domain/javascript/javascriptApplicationVersionItems.js +5 -2
  325. package/dist/domain/javascript/javascriptApplicationVersionKeys.js +2 -1
  326. package/dist/domain/javascript/javascriptAstValues.js +20 -0
  327. package/dist/{application/javascript/JavaScriptReturnShapeProjection.js → domain/javascript/javascriptExportReturnShapeProjection.js} +4 -4
  328. package/dist/domain/javascript/javascriptExportShapeComparison.js +7 -1
  329. package/dist/domain/javascript/javascriptExportShapeComparisonIdentity.js +6 -1
  330. package/dist/domain/javascript/javascriptExportShapeComparisonSchemas.js +29 -1
  331. package/dist/domain/javascript/javascriptExportShapeSelection.js +5 -5
  332. package/dist/domain/javascript/javascriptExportShapeVariants.js +67 -14
  333. package/dist/domain/javascript/javascriptFeatureSeed.js +20 -0
  334. package/dist/domain/javascript/javascriptFeatureTraversal.js +0 -1
  335. package/dist/domain/javascript/javascriptNativeHandoff.js +1 -1
  336. package/dist/domain/javascript/javascriptRecovery.js +3 -8
  337. package/dist/domain/javascript/javascriptRuntimeLoadState.js +0 -1
  338. package/dist/domain/javascript/javascriptRuntimeObservation.js +10 -2
  339. package/dist/domain/javascript/javascriptRuntimeReconciliationMatching.js +1 -1
  340. package/dist/domain/javascript/javascriptRuntimeReconciliationParsing.js +3 -2
  341. package/dist/domain/javascript/javascriptRuntimeStaticCandidates.js +0 -1
  342. package/dist/domain/javascript/javascriptSemanticAnalysis.js +106 -5
  343. package/dist/domain/javascript/javascriptSemanticAsyncEffects.js +2 -1
  344. package/dist/domain/javascript/javascriptSemanticCalls.js +2 -1
  345. package/dist/domain/javascript/javascriptSemanticChildProcesses.js +2 -1
  346. package/dist/domain/javascript/javascriptSemanticCoverage.js +6 -5
  347. package/dist/domain/javascript/javascriptSemanticDataEffectHelpers.js +9 -17
  348. package/dist/domain/javascript/javascriptSemanticDataEffects.js +23 -6
  349. package/dist/domain/javascript/javascriptSemanticGraph.js +98 -43
  350. package/dist/domain/javascript/javascriptSemanticGraphSchemas.js +1 -0
  351. package/dist/domain/javascript/javascriptSemanticMemberMutations.js +77 -20
  352. package/dist/domain/javascript/javascriptSemanticMutationValues.js +21 -27
  353. package/dist/domain/javascript/javascriptSemanticObjects.js +83 -42
  354. package/dist/domain/javascript/javascriptSemanticPrimitives.js +18 -21
  355. package/dist/domain/javascript/javascriptSemanticProjection.js +2 -3
  356. package/dist/domain/javascript/javascriptSemanticPromises.js +2 -1
  357. package/dist/domain/javascript/javascriptSemanticQuerySchemas.js +8 -4
  358. package/dist/domain/javascript/javascriptSemanticResourceLimits.js +77 -0
  359. package/dist/domain/javascript/javascriptSemanticResources.js +1 -1
  360. package/dist/domain/javascript/javascriptSemanticReturns.js +32 -17
  361. package/dist/domain/javascript/javascriptSemanticSlots.js +72 -0
  362. package/dist/domain/javascript/javascriptSemanticValues.js +126 -61
  363. package/dist/domain/javascript/javascriptSourceMapPaths.js +104 -0
  364. package/dist/domain/javascript/javascriptSourceParser.js +6 -2
  365. package/dist/domain/javascript/javascriptStaticAnalysis.js +22 -17
  366. package/dist/domain/javascript/javascriptStaticAnalysisBundler.js +5 -3
  367. package/dist/domain/javascript/javascriptStaticAnalysisCalls.js +16 -5
  368. package/dist/domain/javascript/javascriptStaticAnalysisFindings.js +66 -7
  369. package/dist/domain/javascript/javascriptStaticAnalysisHelpers.js +28 -17
  370. package/dist/domain/javascript/javascriptStaticAnalysisState.js +3 -2
  371. package/dist/domain/javascript/sourceToBundleComparison.js +12 -3
  372. package/dist/domain/javascript/sourceToBundleSignals.js +47 -19
  373. package/dist/domain/jsonSerialization.js +109 -0
  374. package/dist/domain/jsonValue.js +90 -6
  375. package/dist/domain/localPath.js +6 -0
  376. package/dist/domain/managed/managedApplicationGraph.js +10 -10
  377. package/dist/domain/managed/managedArtifact.js +6 -4
  378. package/dist/domain/managed/managedInspectionEvidence.js +16 -0
  379. package/dist/domain/managed/managedMemberComparison.js +2 -9
  380. package/dist/domain/managed/managedMemberComparisonMatch.js +5 -9
  381. package/dist/domain/managed/managedNativeVerification.js +3 -11
  382. package/dist/domain/managed/managedNativeVerificationMatch.js +9 -3
  383. package/dist/domain/native/binaryLayout.js +2 -3
  384. package/dist/domain/native/fileOffsetPartialObservation.js +1 -0
  385. package/dist/domain/native/nativeApiBoundary.js +1 -1
  386. package/dist/domain/native/nativeCallObservation.js +37 -13
  387. package/dist/domain/native/nativeCallPartialObservation.js +33 -0
  388. package/dist/domain/native/nativeInstruction.js +7 -0
  389. package/dist/domain/native/recordedCrash.js +2 -3
  390. package/dist/domain/offsetDateTime.js +17 -0
  391. package/dist/domain/process/processCapture.js +21 -16
  392. package/dist/domain/process/processCaptureCoverage.js +67 -0
  393. package/dist/domain/process/processCaptureExample.js +2 -1
  394. package/dist/domain/process/processCaptureParsing.js +1 -34
  395. package/dist/domain/process/processCaptureValidation.js +81 -13
  396. package/dist/domain/process/processComparison.js +79 -26
  397. package/dist/domain/process/processObservation.js +10 -2
  398. package/dist/domain/process/processScenario.js +35 -12
  399. package/dist/domain/process/processTraceComparison.js +0 -2
  400. package/dist/domain/process/processTraceDimensionProjection.js +1 -1
  401. package/dist/domain/process/processTraceEvaluation.js +15 -11
  402. package/dist/domain/process/processTraceSpecification.js +3 -4
  403. package/dist/domain/propertyListKeys.js +1 -1
  404. package/dist/domain/propertyListXmlText.js +19 -0
  405. package/dist/domain/providerAdapterError.js +3 -1
  406. package/dist/domain/providerOperationHealth.js +54 -0
  407. package/dist/domain/reconstructionCoverage.js +5 -2
  408. package/dist/domain/reconstructionObligationLedgerSchemas.js +2 -1
  409. package/dist/domain/reconstructionReadinessSchemas.js +2 -1
  410. package/dist/domain/reconstructionVerification.js +9 -46
  411. package/dist/domain/reconstructionVerificationSchemas.js +4 -3
  412. package/dist/domain/referenceSourceGraph.js +20 -21
  413. package/dist/domain/staticRuntimeCorrelation.js +8 -45
  414. package/dist/domain/stringPatterns.js +6 -0
  415. package/dist/domain/swiftSymbolClassification.js +61 -0
  416. package/dist/domain/symbolAnalysis.js +66 -18
  417. package/dist/domain/webBundleAnalysis.js +20 -8
  418. package/dist/domain/webBundleAnalyzerInspection.js +13 -8
  419. package/dist/domain/webBundleAnalyzerResult.js +41 -2
  420. package/dist/domain/webCaptureDiff.js +0 -1
  421. package/dist/domain/webCaptureDiffSchemas.js +6 -3
  422. package/dist/domain/webEventListeners.js +3 -2
  423. package/dist/domain/webExecution.js +3 -2
  424. package/dist/domain/webRuntime.js +19 -7
  425. package/dist/domain/webScriptExport.js +1 -1
  426. package/dist/domain/webSourceLocation.js +1 -0
  427. package/dist/dotnet/ManagedArtifactInspector.js +2 -19
  428. package/dist/dotnet/ManagedMemberInspector.js +12 -18
  429. package/dist/dotnet/ManagedMemberInspectorCore.js +47 -44
  430. package/dist/dotnet/ManagedMemberRows.js +75 -62
  431. package/dist/dotnet/ManagedMetadataInventory.js +16 -22
  432. package/dist/dotnet/ManagedMethodBodyReader.js +4 -0
  433. package/dist/dotnet/ManagedNativeBoundaryHelpers.js +109 -94
  434. package/dist/dotnet/ManagedNativeBoundaryInspector.js +12 -21
  435. package/dist/dotnet/ManagedReaderFailure.js +16 -0
  436. package/dist/dotnet/ManagedStaticProvider.js +3 -5
  437. package/dist/evaluation/AgentEvaluationFixtures.js +250 -0
  438. package/dist/evaluation/AgentEvaluationReport.js +28 -0
  439. package/dist/evaluation/CodexAgentEval.js +12 -8
  440. package/dist/evaluation/KnownAnswerEvaluation.js +281 -0
  441. package/dist/evm/EvmoleInterfaceProvider.js +2 -1
  442. package/dist/firmware/FirmwareCommand.js +9 -5
  443. package/dist/firmware/FirmwareFiles.js +1 -1
  444. package/dist/firmware/FirmwareProvider.js +4 -4
  445. package/dist/generatedPackageMetadata.js +2 -2
  446. package/dist/ghidra/GhidraAnalysisProfile.js +7 -5
  447. package/dist/ghidra/GhidraClient.js +126 -34
  448. package/dist/ghidra/GhidraClientStartup.js +0 -2
  449. package/dist/ghidra/GhidraDiagnostics.js +7 -7
  450. package/dist/ghidra/GhidraDoctor.js +6 -5
  451. package/dist/ghidra/GhidraFunctionValues.js +13 -12
  452. package/dist/ghidra/GhidraInstallation.js +58 -33
  453. package/dist/ghidra/GhidraInventoryValues.js +14 -4
  454. package/dist/ghidra/GhidraJavaLaunch.js +66 -0
  455. package/dist/ghidra/GhidraLauncher.js +47 -22
  456. package/dist/ghidra/GhidraProvider.js +6 -2
  457. package/dist/ghidra/GhidraProviderCapabilities.js +20 -2
  458. package/dist/ghidra/GhidraProviderClient.js +36 -15
  459. package/dist/ghidra/GhidraSessionError.js +13 -7
  460. package/dist/ghidra/GhidraSessionRoot.js +39 -0
  461. package/dist/ghidra/GhidraTargetSnapshot.js +47 -12
  462. package/dist/ghidra/GhidraTransport.js +20 -0
  463. package/dist/ghidra/extensions/GhidraExtensions.js +17 -10
  464. package/dist/ghidra/extensions/nativeaot/NativeAotAdapter.js +8 -2
  465. package/dist/hopper/BridgeLauncher.js +65 -56
  466. package/dist/hopper/HopperAnalysisProfile.js +65 -12
  467. package/dist/hopper/HopperCleanup.js +63 -22
  468. package/dist/hopper/HopperClient.js +288 -59
  469. package/dist/hopper/HopperFileOffset.js +237 -0
  470. package/dist/hopper/HopperMachOImage.js +197 -0
  471. package/dist/hopper/HopperOperationStage.js +6 -0
  472. package/dist/hopper/HopperProvider.js +71 -19
  473. package/dist/hopper/HopperProviderCapabilities.js +19 -1
  474. package/dist/hopper/HopperRegexSearch.js +134 -0
  475. package/dist/hopper/HopperRegexWorker.js +27 -0
  476. package/dist/hopper/HopperRequestQueue.js +68 -19
  477. package/dist/hopper/HopperTargetLease.js +133 -49
  478. package/dist/hopper/LinuxPrivateDisplayProbe.js +6 -0
  479. package/dist/ida/IdaConfiguration.js +8 -3
  480. package/dist/ida/IdaInput.js +1 -7
  481. package/dist/ida/IdaMcpConnection.js +8 -4
  482. package/dist/ida/IdaOperationRunner.js +3 -3
  483. package/dist/ida/IdaProvider.js +8 -12
  484. package/dist/ida/IdaSessionClient.js +20 -18
  485. package/dist/ida/IdaWorkspace.js +12 -13
  486. package/dist/inspector/JavaScriptRuntimeScope.js +9 -1
  487. package/dist/inspector/V8InspectorCaptureProjection.js +9 -4
  488. package/dist/inspector/V8InspectorProvider.js +82 -36
  489. package/dist/javascript/recovery/WakaruCommand.js +7 -2
  490. package/dist/javascript/recovery/WakaruExecution.js +5 -2
  491. package/dist/javascript/sourceMaps/DecodedSourceMap.js +47 -0
  492. package/dist/javascript/sourceMaps/SourceMapCommand.js +16 -0
  493. package/dist/javascript/sourceMaps/SourceMapFormat.js +79 -31
  494. package/dist/javascript/sourceMaps/TraceSourceMap.js +14 -28
  495. package/dist/main/shutdown.js +11 -3
  496. package/dist/main/startup.js +9 -2
  497. package/dist/main/transport.js +22 -2
  498. package/dist/main.js +11 -18
  499. package/dist/mcpDoctor.js +62 -2
  500. package/dist/native/AppleDispatchCoverage.js +47 -6
  501. package/dist/native/AppleDispatchDecodeFacts.js +6 -0
  502. package/dist/native/AppleDispatchMetadata.js +6 -3
  503. package/dist/native/AppleMachoFixups.js +48 -24
  504. package/dist/native/AppleMachoSelection.js +48 -22
  505. package/dist/native/AppleObjcCategories.js +6 -2
  506. package/dist/native/AppleObjcDispatchFacets.js +5 -2
  507. package/dist/native/AppleObjcProperties.js +2 -1
  508. package/dist/native/AppleSwiftDispatchFacets.js +27 -21
  509. package/dist/native/AppleSwiftVtables.js +21 -15
  510. package/dist/native/CommandRunner.js +87 -88
  511. package/dist/native/LldbCallTracer.js +372 -103
  512. package/dist/native/LldbRetainedObservations.js +178 -0
  513. package/dist/native/NativeCallObservation.js +62 -3
  514. package/dist/native/NativeMacOSProvider.js +122 -31
  515. package/dist/native/NativeUiHelperRuntime.js +11 -2
  516. package/dist/native/NativeUiObservation.js +2 -2
  517. package/dist/native/SignatureTargetBinding.js +155 -0
  518. package/dist/native/parsers/lipo.js +71 -1
  519. package/dist/native/pwndbg/PwndbgCoreContext.js +25 -5
  520. package/dist/native/pwntools/PwntoolsDecoder.js +2 -1
  521. package/dist/native/pwntools/RecordedCrashStructureBindings.js +2 -0
  522. package/dist/process/DarwinProcessRunTokenReader.js +23 -10
  523. package/dist/process/ExecFileOutput.js +108 -6
  524. package/dist/process/OwnedCommand.js +7 -2
  525. package/dist/process/PrivateRuntimeRoot.js +10 -5
  526. package/dist/process/ProcessOwnership.js +204 -57
  527. package/dist/process/ProcessOwnershipObservation.js +60 -9
  528. package/dist/process/ProviderProcess.js +39 -10
  529. package/dist/process/capture/FilesystemSnapshot.js +50 -13
  530. package/dist/process/capture/ProcessCaptureError.js +15 -2
  531. package/dist/process/capture/ProcessCaptureLifecycle.js +235 -81
  532. package/dist/process/capture/ProcessFilesystemEffects.js +33 -3
  533. package/dist/process/capture/ProcessHarness.js +21 -25
  534. package/dist/process/capture/ProcessNormalization.js +20 -2
  535. package/dist/process/capture/ProcessSampling.js +25 -2
  536. package/dist/process/capture/TerminalRenderer.js +14 -0
  537. package/dist/process/snapshotEnvironment.js +14 -0
  538. package/dist/server/EvidenceMcpServer.js +157 -0
  539. package/dist/server/createServer.js +61 -41
  540. package/dist/server/mcpClientMetadata.js +12 -5
  541. package/dist/server/promptCompletion.js +3 -8
  542. package/dist/server/registerAnalysisViewTool.js +15 -0
  543. package/dist/server/registerAndroidTools.js +2 -5
  544. package/dist/server/registerApplicationTools/compareExportShapes.js +4 -5
  545. package/dist/server/registerApplicationTools/compareSourceToBundle.js +4 -5
  546. package/dist/server/registerApplicationTools/compareVersions.js +4 -5
  547. package/dist/server/registerApplicationTools/coverage.js +1 -2
  548. package/dist/server/registerApplicationTools/helpers.js +1 -4
  549. package/dist/server/registerApplicationTools/obligationLedger.js +4 -5
  550. package/dist/server/registerApplicationTools/projectMobileApplicationGraph.js +3 -4
  551. package/dist/server/registerApplicationTools/traceFeature.js +4 -5
  552. package/dist/server/registerApplicationTools/traceSemantics.js +4 -5
  553. package/dist/server/registerArtifactComparisonTool.js +13 -10
  554. package/dist/server/registerBinaryDiagnosticsTools.js +2 -5
  555. package/dist/server/registerBrowserScenarioTool.js +3 -6
  556. package/dist/server/registerBrowserTools.js +13 -18
  557. package/dist/server/registerBundleComparisonTool.js +5 -7
  558. package/dist/server/registerCloseLifecycleTool.js +9 -20
  559. package/dist/server/registerElectronTools.js +10 -15
  560. package/dist/server/registerEnhancedTools.js +36 -77
  561. package/dist/server/registerEvidenceTools.js +3 -6
  562. package/dist/server/registerEvmTools.js +2 -5
  563. package/dist/server/registerFirmwareTools.js +2 -5
  564. package/dist/server/registerFunctionComparisonTool.js +15 -12
  565. package/dist/server/registerInvestigationTools.js +16 -17
  566. package/dist/server/registerJavaScriptRecoveryTool.js +2 -5
  567. package/dist/server/registerJavaScriptRuntimeObservationTools.js +6 -8
  568. package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +5 -8
  569. package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +4 -7
  570. package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +6 -9
  571. package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +6 -9
  572. package/dist/server/registerOfficialTools.js +4 -21
  573. package/dist/server/registerProcessComparisonTool.js +74 -48
  574. package/dist/server/registerRecordedCrashTools.js +2 -5
  575. package/dist/server/registerSessionRecordTools.js +19 -24
  576. package/dist/server/registerSessionStatusTool.js +19 -6
  577. package/dist/server/registerSessionTools.js +20 -18
  578. package/dist/server/registerWebModuleTool.js +2 -5
  579. package/dist/server/registerWebNetworkCaptureTool.js +2 -5
  580. package/dist/server/registerWebRuntimeTools.js +4 -9
  581. package/dist/server/registerWebScriptTool.js +2 -5
  582. package/dist/server/registerWebSourceLocationTool.js +2 -5
  583. package/dist/server/runDerivedOperation.js +15 -3
  584. package/dist/server/sessionAvailabilityPolicy.js +0 -1
  585. package/dist/server/toolRegistrationOptions.js +2 -2
  586. package/dist/server/toolResult.js +75 -51
  587. package/dist/server/toolResultEncoding.js +34 -0
  588. package/dist/windows/WindowsNativeLoader.js +1 -0
  589. package/dist/windows/WindowsOwnedProcess.js +60 -15
  590. package/dist/windows/WindowsPrivateRuntime.js +7 -8
  591. package/install.sh +1 -1
  592. package/native/windows/README.md +3 -1
  593. package/native/windows/build/manifest.json +2 -2
  594. package/native/windows/build/rea-windows-x64.node +0 -0
  595. package/package.json +44 -30
  596. package/scripts/electron-active-hook-boundaries.cjs +18 -20
  597. package/scripts/electron-active-hook.cjs +241 -37
  598. package/scripts/rea.mjs +3 -6
  599. package/skills/reverse-engineer-anything/SKILL.md +12 -3
  600. package/skills/reverse-engineer-anything/references/android-applications.md +6 -3
  601. package/skills/reverse-engineer-anything/references/evidence-workflows.md +8 -4
  602. package/skills/reverse-engineer-anything/references/javascript-applications.md +20 -3
  603. package/skills/reverse-engineer-anything/references/native-and-artifacts.md +9 -0
  604. package/dist/config.js +0 -1
  605. package/dist/contracts/browserCaptureToolInputSchema.js +0 -43
  606. package/dist/contracts/process/processCaptureExample.js +0 -2
  607. package/dist/contracts/toolOutputSchemas.js +0 -2
  608. package/dist/ghidra/GhidraDefaults.js +0 -2
  609. package/dist/main/reload.js +0 -12
  610. package/dist/main/state.js +0 -3
  611. package/dist/server/sessionToolPolicies.js +0 -2
@@ -11,7 +11,7 @@ import { projectInputIssues } from "./domain/inputIssueProjection.js";
11
11
  import { browserScenarioSchema } from "./domain/browserScenario.js";
12
12
  const OPERATION = "capture_browser_scenario";
13
13
  /** Register the one-shot controlled browser scenario command. */
14
- export const registerBrowserScenarioCommands = (cli, logger) => {
14
+ export const registerBrowserScenarioCommands = (cli, logger, environment) => {
15
15
  cli.command(CLI_COMMANDS.captureBrowserScenario, {
16
16
  description: "Run one bounded Playwright browser scenario and return Evidence",
17
17
  args: z.object({
@@ -26,7 +26,7 @@ export const registerBrowserScenarioCommands = (cli, logger) => {
26
26
  const scenario = browserScenarioSchema.safeParse(resolveCliJsonPaths(input.value, [["browser", "executable_path"]]));
27
27
  if (!scenario.success)
28
28
  return cliError(new AnalysisInputError(OPERATION, { cause: scenario.error }, projectInputIssues(scenario.error.issues, input.value)));
29
- const result = await captureBrowserScenario(createBrowserScenarioProvider(), scenario.data);
29
+ const result = await captureBrowserScenario(createBrowserScenarioProvider(environment), scenario.data);
30
30
  return result.ok ? result.value : cliError(result.error);
31
31
  }),
32
32
  });
@@ -41,6 +41,7 @@ export const CLI_COMMANDS = Object.freeze({
41
41
  inspectManagedArtifact: "inspect-managed-artifact",
42
42
  inspectRecordedCrash: "inspect-recorded-crash",
43
43
  inspectBinaryLayout: "inspect-binary-layout",
44
+ inspectAnalysisView: "inspect-analysis-view",
44
45
  inspectFirmwareRegions: "inspect-firmware-regions",
45
46
  extractFirmware: "extract-firmware",
46
47
  inspectAndroidPackage: "inspect-android-package",
@@ -139,7 +140,6 @@ export const MCP_TOOLS_WITHOUT_DEDICATED_CLI = Object.freeze([
139
140
  "set_addresses_names",
140
141
  "set_bookmark",
141
142
  "set_comment",
142
- "set_current_document",
143
143
  "set_inline_comment",
144
144
  "unset_bookmark",
145
145
  "get_objc_classes",
@@ -27,9 +27,9 @@ export const parseCliJsonInput = async (value, operation) => {
27
27
  /**
28
28
  * Resolve named string fields of CLI-supplied JSON against the operator
29
29
  * working directory. Each entry is a key path from the document root; only
30
- * fields holding strings are resolved, everything else passes through
31
- * untouched. Shared MCP contracts reject relative paths, so CLI workflows
32
- * resolve operator-relative values before validation.
30
+ * fields holding nonblank strings are resolved, everything else passes through
31
+ * untouched so shared schemas can reject blank paths. Shared MCP contracts reject
32
+ * relative paths, so CLI workflows resolve operator-relative values before validation.
33
33
  */
34
34
  export const resolveCliJsonPaths = (value, paths) => {
35
35
  let resolved = value;
@@ -45,7 +45,12 @@ const resolveJsonPath = (value, keys) => {
45
45
  if (key !== head)
46
46
  return [key, entry];
47
47
  if (tail.length === 0)
48
- return [key, typeof entry === "string" ? resolve(entry) : entry];
48
+ return [
49
+ key,
50
+ typeof entry === "string" && entry.trim().length > 0
51
+ ? resolve(entry)
52
+ : entry,
53
+ ];
49
54
  return [key, resolveJsonPath(entry, tail)];
50
55
  });
51
56
  return Object.fromEntries(entries);
@@ -90,8 +95,22 @@ const jsonFileError = (path, operation, reason, cause) => ({
90
95
  error: "Application workflow failed",
91
96
  ...projectAnalysisError(new AnalysisInputError(operation, cause === undefined ? undefined : { cause }, reason === "invalid-json"
92
97
  ? [{ path: [], reason: "invalid_format", expected: "JSON" }]
93
- : [])),
98
+ : [readFailureIssue(path, cause)])),
94
99
  ...(path === undefined ? {} : { input_path: path }),
95
100
  input_reason: reason,
96
101
  },
97
102
  });
103
+ /** Name the system error so the caller can tell a typo from a permission denial. */
104
+ const readFailureIssue = (path, cause) => {
105
+ const code = typeof cause === "object" &&
106
+ cause !== null &&
107
+ "code" in cause &&
108
+ typeof cause.code === "string"
109
+ ? ` (${cause.code})`
110
+ : "";
111
+ return {
112
+ path: [],
113
+ reason: "invalid_value",
114
+ message: `The JSON input file could not be read${code}: ${path ?? ""}`,
115
+ };
116
+ };
package/dist/cliOutput.js CHANGED
@@ -1,15 +1,5 @@
1
- import { safeParseJson } from "./domain/safeJson.js";
2
- const SAFE_VALIDATION_MESSAGE = "REA could not read the command arguments. Run `rea --help`, correct the arguments, then try again.";
3
1
  const UNSUPPORTED_OUTPUT_COMBINATION_MESSAGE = "Token windows cannot preserve structured output. Remove --token-limit/--token-offset and use --filter-output or command pagination.";
4
2
  const INCUR_OUTPUT_FORMATS = new Set(["toon", "json", "yaml", "md", "jsonl"]);
5
- const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
6
- const validationError = (value) => {
7
- if (value.code === "VALIDATION_ERROR")
8
- return value;
9
- if (value.ok === false && isRecord(value.error))
10
- return value.error.code === "VALIDATION_ERROR" ? value.error : undefined;
11
- return undefined;
12
- };
13
3
  /** Read effective Incur output controls at the executable boundary. */
14
4
  export const parseCliOutputArguments = (arguments_) => {
15
5
  let format = "toon";
@@ -105,31 +95,3 @@ export const renderCliOutputArgumentError = (error) => {
105
95
  return `ok: false\nerror:\n code: ${error.code}\n message: ${JSON.stringify(error.message)}\n`;
106
96
  return `${JSON.stringify(value)}\n`;
107
97
  };
108
- /** Remove validator internals from Incur's caller-visible CLI output. */
109
- export const sanitizeCliOutput = (output) => {
110
- const trimmed = output.trimStart();
111
- if (trimmed.startsWith("{")) {
112
- const decoded = safeParseJson(trimmed);
113
- if (!decoded.ok)
114
- return output;
115
- const parsed = decoded.value;
116
- if (!isRecord(parsed))
117
- return output;
118
- const error = validationError(parsed);
119
- if (error !== undefined) {
120
- const safeError = {
121
- code: "VALIDATION_ERROR",
122
- message: SAFE_VALIDATION_MESSAGE,
123
- };
124
- if (error === parsed)
125
- return `${JSON.stringify(safeError)}\n`;
126
- return `${JSON.stringify({ ...parsed, error: safeError })}\n`;
127
- }
128
- return output;
129
- }
130
- if (/^ok: false\r?\nerror:\r?\n code: VALIDATION_ERROR(?:\r?\n|$)/u.test(trimmed))
131
- return `ok: false\nerror:\n code: VALIDATION_ERROR\n message: "${SAFE_VALIDATION_MESSAGE}"\n`;
132
- if (!/^code: VALIDATION_ERROR(?:\r?\n|$)/u.test(trimmed))
133
- return output;
134
- return `code: VALIDATION_ERROR\nmessage: "${SAFE_VALIDATION_MESSAGE}"\n`;
135
- };
@@ -1,30 +1,34 @@
1
+ import { snapshotEnvironment } from "../process/snapshotEnvironment.js";
1
2
  import { ARTIFACT_PROVIDER_IDENTITY, artifactCapabilities, } from "../artifacts/ArtifactProviderMetadata.js";
2
3
  import { MANAGED_STATIC_PROVIDER_IDENTITY, managedStaticCapabilities, } from "../dotnet/ManagedStaticProviderMetadata.js";
3
4
  import { NATIVE_MACOS_PROVIDER_IDENTITY, nativeMacOSCapabilities, } from "../native/NativeMacOSProviderMetadata.js";
4
5
  /** Wire the three existing auxiliary AnalysisProvider implementations lazily. */
5
- export const auxiliaryAnalysisProviderDeclarations = (platform = process.platform) => [
6
- {
7
- identity: ARTIFACT_PROVIDER_IDENTITY,
8
- capabilities: artifactCapabilities(platform),
9
- load: async () => {
10
- const { ArtifactProvider } = await import("../artifacts/ArtifactProvider.js");
11
- return new ArtifactProvider(platform);
6
+ export const auxiliaryAnalysisProviderDeclarations = (selectedEnvironment, platform = process.platform) => {
7
+ const environment = snapshotEnvironment(selectedEnvironment, platform);
8
+ return [
9
+ {
10
+ identity: ARTIFACT_PROVIDER_IDENTITY,
11
+ capabilities: artifactCapabilities(platform),
12
+ load: async () => {
13
+ const { ArtifactProvider } = await import("../artifacts/ArtifactProvider.js");
14
+ return new ArtifactProvider(environment, platform);
15
+ },
12
16
  },
13
- },
14
- {
15
- identity: NATIVE_MACOS_PROVIDER_IDENTITY,
16
- capabilities: nativeMacOSCapabilities(platform),
17
- load: async () => {
18
- const { NativeMacOSProvider } = await import("../native/NativeMacOSProvider.js");
19
- return new NativeMacOSProvider(undefined, platform);
17
+ {
18
+ identity: NATIVE_MACOS_PROVIDER_IDENTITY,
19
+ capabilities: nativeMacOSCapabilities(platform),
20
+ load: async () => {
21
+ const { NativeMacOSProvider } = await import("../native/NativeMacOSProvider.js");
22
+ return new NativeMacOSProvider(environment, undefined, platform);
23
+ },
20
24
  },
21
- },
22
- {
23
- identity: MANAGED_STATIC_PROVIDER_IDENTITY,
24
- capabilities: managedStaticCapabilities(),
25
- load: async () => {
26
- const { ManagedStaticProvider } = await import("../dotnet/ManagedStaticProvider.js");
27
- return new ManagedStaticProvider();
25
+ {
26
+ identity: MANAGED_STATIC_PROVIDER_IDENTITY,
27
+ capabilities: managedStaticCapabilities(),
28
+ load: async () => {
29
+ const { ManagedStaticProvider } = await import("../dotnet/ManagedStaticProvider.js");
30
+ return new ManagedStaticProvider();
31
+ },
28
32
  },
29
- },
30
- ];
33
+ ];
34
+ };
@@ -1,25 +1,25 @@
1
+ import { snapshotEnvironment } from "../process/snapshotEnvironment.js";
1
2
  import { HopperProvider } from "../hopper/HopperProvider.js";
2
3
  import { GhidraProvider } from "../ghidra/GhidraProvider.js";
3
4
  import { IdaProvider } from "../ida/IdaProvider.js";
4
- import { silentLogger } from "../logger.js";
5
5
  import { auxiliaryAnalysisProviderDeclarations } from "./auxiliaryAnalysisProviders.js";
6
6
  import { AnalysisProviderRegistry } from "../application/binary/AnalysisProviderRegistry.js";
7
7
  import { composeBinarySession } from "../application/binary/BinarySessionComposition.js";
8
8
  import { LazyAnalysisProvider } from "../application/binary/LazyAnalysisProvider.js";
9
9
  import { ManagedStaticProvider } from "../dotnet/ManagedStaticProvider.js";
10
- import { SessionProviderRouter } from "../application/binary/SessionProviderRouter.js";
11
10
  /**
12
11
  * Compose the target-switching runtime shared directly by CLI and MCP adapters.
13
12
  * This is the sole production wiring point, so both adapters share identical
14
13
  * provider selection, profile, lifecycle, and Evidence semantics.
15
14
  */
16
- export const createBinarySession = (config, logger = silentLogger) => {
17
- const hopper = new HopperProvider(config, logger);
18
- const ghidra = new GhidraProvider(config, logger);
19
- const ida = new IdaProvider(config);
20
- return composeBinarySession(new AnalysisProviderRegistry([hopper, ghidra, ida], config.analysisProvider), auxiliaryAnalysisProviderDeclarations().map((declaration) => new LazyAnalysisProvider(declaration)));
15
+ export const createBinarySession = (config, logger, selectedEnvironment) => {
16
+ const environment = snapshotEnvironment(selectedEnvironment);
17
+ const hopper = new HopperProvider(config, logger, environment);
18
+ const ghidra = new GhidraProvider(config, logger, environment);
19
+ const ida = new IdaProvider(config, environment);
20
+ return composeBinarySession(new AnalysisProviderRegistry([hopper, ghidra, ida], config.analysisProvider), auxiliaryAnalysisProviderDeclarations(environment).map((declaration) => new LazyAnalysisProvider(declaration)));
21
21
  };
22
22
  /** Compose an execution-free managed session without native provider selection. */
23
- export const createManagedBinarySession = () => composeBinarySession(SessionProviderRouter.selectable(new AnalysisProviderRegistry([]), [
23
+ export const createManagedBinarySession = () => composeBinarySession(new AnalysisProviderRegistry([]), [
24
24
  new ManagedStaticProvider(),
25
- ]));
25
+ ]);
@@ -1,3 +1,4 @@
1
1
  import { PlaywrightBrowserScenarioProvider } from "../browser/PlaywrightBrowserScenarioProvider.js";
2
+ import { PlaywrightScenarioSessionFactory } from "../browser/PlaywrightScenarioSession.js";
2
3
  /** Construct a fresh provider without opening a target or acquiring an engine. */
3
- export const createBrowserScenarioProvider = () => new PlaywrightBrowserScenarioProvider();
4
+ export const createBrowserScenarioProvider = (environment) => new PlaywrightBrowserScenarioProvider(new PlaywrightScenarioSessionFactory(environment));
@@ -1,17 +1,24 @@
1
+ import { snapshotEnvironment } from "../process/snapshotEnvironment.js";
2
+ import { parseConfig } from "../config/parseConfig.js";
1
3
  import { runDirectAnalysis as executeDirectAnalysis, runProviderAnalysis as executeProviderAnalysis, runManagedProviderExecution as executeManagedProvider, } from "../application/DirectAnalysis.js";
2
4
  import { runCapabilityStatus as executeCapabilityStatus, runProviderStatus as executeProviderStatus, } from "../application/DirectAnalysisStatus.js";
3
5
  import { createBinarySession, createManagedBinarySession } from "./binary.js";
4
- const dependencies = {
5
- createBinarySession,
6
- createManagedBinarySession,
6
+ /** Bind one-shot analysis and status commands to one caller-selected environment. */
7
+ export const createDirectAnalysis = (selectedEnvironment) => {
8
+ const environment = snapshotEnvironment(selectedEnvironment);
9
+ const dependencies = {
10
+ readConfiguration: () => parseConfig(environment),
11
+ createBinarySession: (config, logger) => createBinarySession(config, logger, environment),
12
+ createManagedBinarySession,
13
+ };
14
+ return {
15
+ runDirectAnalysis: executeDirectAnalysis.bind(undefined, dependencies),
16
+ runProviderAnalysis: executeProviderAnalysis.bind(undefined, dependencies),
17
+ runProviderStatus: executeProviderStatus.bind(undefined, dependencies),
18
+ runCapabilityStatus: executeCapabilityStatus.bind(undefined, dependencies),
19
+ };
7
20
  };
8
- /** Run one isolated binary operation through the production session factory. */
9
- export const runDirectAnalysis = executeDirectAnalysis.bind(undefined, dependencies);
10
- /** Run one isolated native, artifact or managed operation. */
11
- export const runProviderAnalysis = executeProviderAnalysis.bind(undefined, dependencies);
12
- /** Execute managed metadata without constructing native provider candidates. */
13
- export const runManagedProviderExecution = executeManagedProvider.bind(undefined, dependencies);
14
- /** Report production provider candidates without opening a target. */
15
- export const runProviderStatus = executeProviderStatus.bind(undefined, dependencies);
16
- /** Report production session operations without opening a target. */
17
- export const runCapabilityStatus = executeCapabilityStatus.bind(undefined, dependencies);
21
+ /** Execute managed metadata without configuration or native provider candidates. */
22
+ export const runManagedProviderExecution = executeManagedProvider.bind(undefined, {
23
+ createManagedBinarySession,
24
+ });
@@ -1,3 +1,3 @@
1
1
  import { PlaywrightElectronActiveProvider } from "../browser/PlaywrightElectronActiveProvider.js";
2
2
  /** Construct a fresh provider without opening a target or acquiring an engine. */
3
- export const createElectronScenarioProvider = () => new PlaywrightElectronActiveProvider();
3
+ export const createElectronScenarioProvider = (environment) => new PlaywrightElectronActiveProvider(environment);
@@ -1,12 +1,17 @@
1
+ import { snapshotEnvironment } from "../process/snapshotEnvironment.js";
1
2
  import { CDP_BROWSER_PROVIDER_IDENTITY, PLAYWRIGHT_BROWSER_SCENARIO_PROVIDER_IDENTITY, CDP_ELECTRON_PROVIDER_IDENTITY, PLAYWRIGHT_ELECTRON_ACTIVE_PROVIDER_IDENTITY, } from "../browser/providerIdentities.js";
2
3
  import { V8_INSPECTOR_PROVIDER_IDENTITY } from "../inspector/providerIdentity.js";
3
4
  import { err, ok } from "../domain/result.js";
4
- const productionFactories = {
5
- browserObservation: async () => (await import("./browserObservation.js")).createBrowserObservationProvider(),
6
- browserScenarioCapture: async () => (await import("./browserScenario.js")).createBrowserScenarioProvider(),
7
- electronObservation: async () => (await import("./electronObservation.js")).createElectronObservationProvider(),
8
- electronActiveObservation: async () => (await import("./electronScenario.js")).createElectronScenarioProvider(),
9
- javascriptRuntimeObservation: async () => (await import("./javascriptRuntimeObservation.js")).createJavaScriptRuntimeObservationProvider(),
5
+ /** Bind optional provider construction to one caller-selected process environment. */
6
+ export const createOptionalObservationFactories = (selectedEnvironment) => {
7
+ const environment = snapshotEnvironment(selectedEnvironment);
8
+ return {
9
+ browserObservation: async () => (await import("./browserObservation.js")).createBrowserObservationProvider(),
10
+ browserScenarioCapture: async () => (await import("./browserScenario.js")).createBrowserScenarioProvider(environment),
11
+ electronObservation: async () => (await import("./electronObservation.js")).createElectronObservationProvider(),
12
+ electronActiveObservation: async () => (await import("./electronScenario.js")).createElectronScenarioProvider(environment),
13
+ javascriptRuntimeObservation: async () => (await import("./javascriptRuntimeObservation.js")).createJavaScriptRuntimeObservationProvider(),
14
+ };
10
15
  };
11
16
  const loadPort = async (factory, providerId) => {
12
17
  try {
@@ -20,7 +25,7 @@ const loadPort = async (factory, providerId) => {
20
25
  }
21
26
  };
22
27
  /** Load each adapter independently, retaining healthy peers and exact failures. */
23
- export const loadOptionalObservationProviders = async (factories = productionFactories) => {
28
+ export const loadOptionalObservationProviders = async (factories) => {
24
29
  const [browser, scenario, electron, electronActive, runtime] = await Promise.all([
25
30
  loadPort(factories.browserObservation, CDP_BROWSER_PROVIDER_IDENTITY.id),
26
31
  loadPort(factories.browserScenarioCapture, PLAYWRIGHT_BROWSER_SCENARIO_PROVIDER_IDENTITY.id),
@@ -3,8 +3,11 @@ import { isAbsolute } from "node:path";
3
3
  import { ConfigurationError } from "../domain/configurationErrors.js";
4
4
  import { err, ok } from "../domain/result.js";
5
5
  import { analysisProviderSelectorSchema } from "../contracts/providerSelection.js";
6
+ import { ghidraStartupTimeoutSchema } from "./ghidraStartupTimeout.js";
7
+ import { mcpResponseBudgetSchema } from "./mcpResponseBudget.js";
6
8
  const environmentSchema = z.object({
7
9
  REA_ANALYSIS_PROVIDER: analysisProviderSelectorSchema.default("auto"),
10
+ REA_MCP_MAX_RESPONSE_BYTES: mcpResponseBudgetSchema.optional(),
8
11
  REA_IDA_MCP_CONFIG: z
9
12
  .string()
10
13
  .min(1)
@@ -25,6 +28,7 @@ const environmentSchema = z.object({
25
28
  .min(1)
26
29
  .refine(isAbsolute, "REA_GHIDRA_NATIVEAOT_JAR must be absolute")
27
30
  .optional(),
31
+ REA_GHIDRA_STARTUP_TIMEOUT_MS: ghidraStartupTimeoutSchema,
28
32
  REA_ILSPY_CMD_PATH: z
29
33
  .string()
30
34
  .min(1)
@@ -42,8 +46,14 @@ const environmentSchema = z.object({
42
46
  export const parseEnvironment = (environment) => {
43
47
  const parsed = environmentSchema.safeParse(environment);
44
48
  if (!parsed.success) {
49
+ // Zod messages name the constraint, never the rejected value.
50
+ const settings = parsed.error.issues.map((issue) => ({
51
+ setting: String(issue.path[0] ?? "environment"),
52
+ constraint: issue.message,
53
+ }));
45
54
  return err(new ConfigurationError("Invalid REA environment configuration", {
46
55
  cause: parsed.error,
56
+ settings,
47
57
  }));
48
58
  }
49
59
  return ok(parsed.data);
@@ -0,0 +1,12 @@
1
+ import { z } from "zod";
2
+ /** Default absolute deadline for Ghidra import, analysis, bridge, and readiness. */
3
+ export const DEFAULT_GHIDRA_STARTUP_TIMEOUT_MS = 330_000;
4
+ // Node schedules delays above this signed 32-bit boundary as a 1 ms timer.
5
+ const MAX_TIMER_DELAY_MS = 2_147_483_647;
6
+ /** Parse the optional setting without reading the ambient process environment. */
7
+ export const ghidraStartupTimeoutSchema = z
8
+ .string()
9
+ .regex(/^[1-9]\d*$/u, "must be a positive decimal integer")
10
+ .transform(Number)
11
+ .pipe(z.number().int().min(1).max(MAX_TIMER_DELAY_MS))
12
+ .default(DEFAULT_GHIDRA_STARTUP_TIMEOUT_MS);
@@ -0,0 +1,12 @@
1
+ import { userInfo } from "node:os";
2
+ /** Resolve the caller's selected home before consulting the host account. */
3
+ export const homeDirectoryFromEnvironment = (environment, platform) => {
4
+ const selected = platform === "win32"
5
+ ? (environment.USERPROFILE ??
6
+ (environment.HOMEDRIVE !== undefined &&
7
+ environment.HOMEPATH !== undefined
8
+ ? `${environment.HOMEDRIVE}${environment.HOMEPATH}`
9
+ : environment.HOME))
10
+ : (environment.HOME ?? environment.USERPROFILE);
11
+ return selected ?? userInfo().homedir;
12
+ };
@@ -0,0 +1,30 @@
1
+ import { z } from "zod";
2
+ import { ConfigurationError } from "../domain/configurationErrors.js";
3
+ import { err, ok } from "../domain/result.js";
4
+ // This override supports clients with larger frames. Keep the configuration
5
+ // parser independent of the SDK's eager server imports; conformance verifies
6
+ // this floor against the pinned SDK's actual default receive-buffer size.
7
+ const MINIMUM_RESPONSE_BYTES = 10 * 1024 * 1024;
8
+ /** Optional stdio response budget, including room for the protocol envelope. */
9
+ export const mcpResponseBudgetSchema = z
10
+ .string()
11
+ .regex(/^[1-9]\d*$/u)
12
+ .transform(Number)
13
+ .pipe(z.number().int().safe().min(MINIMUM_RESPONSE_BYTES));
14
+ const budgetConstraint = `REA_MCP_MAX_RESPONSE_BYTES must be a decimal safe integer at least ${String(MINIMUM_RESPONSE_BYTES)} bytes, the default stdio receive-buffer size.`;
15
+ /** Parse only the MCP-specific budget without loading unrelated provider settings. */
16
+ export const parseMcpResponseBudget = (value) => {
17
+ if (value === undefined)
18
+ return ok(undefined);
19
+ const parsed = mcpResponseBudgetSchema.safeParse(value);
20
+ return parsed.success
21
+ ? ok(parsed.data)
22
+ : err(new ConfigurationError(budgetConstraint, {
23
+ settings: [
24
+ {
25
+ setting: "REA_MCP_MAX_RESPONSE_BYTES",
26
+ constraint: budgetConstraint,
27
+ },
28
+ ],
29
+ }));
30
+ };
@@ -1,9 +1,9 @@
1
1
  import { accessSync, constants } from "node:fs";
2
- import { homedir } from "node:os";
3
2
  import { join } from "node:path";
4
3
  import { ConfigurationError } from "../domain/configurationErrors.js";
5
4
  import { ok } from "../domain/result.js";
6
5
  import { parseEnvironment } from "./environment.js";
6
+ import { homeDirectoryFromEnvironment } from "./homeDirectory.js";
7
7
  import { parseStringArray, parseLoaderArgs } from "./parsers.js";
8
8
  const DEFAULT_HOPPER_LAUNCHER_PATH = "/Applications/Hopper Disassembler.app/Contents/MacOS/hopper";
9
9
  const SYSTEM_LINUX_HOPPER = "/opt/hopper/bin/Hopper";
@@ -16,7 +16,7 @@ const executableAvailable = (path) => {
16
16
  return false;
17
17
  }
18
18
  };
19
- export const defaultHopperLauncherPath = (platform = process.platform, homeDirectory = homedir(), executable = executableAvailable) => {
19
+ const defaultHopperLauncherPath = (platform, homeDirectory, executable = executableAvailable) => {
20
20
  if (platform !== "linux")
21
21
  return DEFAULT_HOPPER_LAUNCHER_PATH;
22
22
  if (executable(SYSTEM_LINUX_HOPPER))
@@ -37,17 +37,22 @@ export const parseConfig = (environment) => {
37
37
  if (!secretPatterns.ok)
38
38
  return secretPatterns;
39
39
  return ok({
40
+ ...(env.REA_MCP_MAX_RESPONSE_BYTES === undefined
41
+ ? {}
42
+ : { mcpMaxResponseBytes: env.REA_MCP_MAX_RESPONSE_BYTES }),
40
43
  analysisProvider: env.REA_ANALYSIS_PROVIDER,
41
44
  ...(env.REA_IDA_MCP_CONFIG === undefined
42
45
  ? {}
43
46
  : { idaMcpConfigPath: env.REA_IDA_MCP_CONFIG }),
44
47
  ghidraInstallDir: env.GHIDRA_INSTALL_DIR,
45
48
  ghidraJavaHome: env.JAVA_HOME,
49
+ ghidraStartupTimeoutMs: env.REA_GHIDRA_STARTUP_TIMEOUT_MS,
46
50
  ...(env.REA_GHIDRA_NATIVEAOT_JAR === undefined
47
51
  ? {}
48
52
  : { ghidraNativeAotJar: env.REA_GHIDRA_NATIVEAOT_JAR }),
49
53
  ilspyCmdPath: env.REA_ILSPY_CMD_PATH,
50
- hopperLauncherPath: env.HOPPER_LAUNCHER_PATH ?? defaultHopperLauncherPath(),
54
+ hopperLauncherPath: env.HOPPER_LAUNCHER_PATH ??
55
+ defaultHopperLauncherPath(process.platform, homeDirectoryFromEnvironment(environment, process.platform)),
51
56
  hopperTargetPath: env.HOPPER_TARGET_PATH,
52
57
  hopperTargetKind: env.HOPPER_TARGET_KIND,
53
58
  hopperLoaderArgs: loaderArgs.value,
@@ -1,33 +1,30 @@
1
1
  import { z } from "zod";
2
2
  import { ConfigurationError } from "../domain/configurationErrors.js";
3
3
  import { err, ok } from "../domain/result.js";
4
+ import { safeParseJson } from "../domain/safeJson.js";
5
+ /** Decode explicitly selected reference-source exclusion patterns. */
4
6
  export const parseStringArray = (encoded, name) => {
5
- try {
6
- const parsed = z.array(z.string().min(1)).safeParse(JSON.parse(encoded));
7
- return parsed.success
8
- ? ok(parsed.data)
9
- : err(new ConfigurationError(`${name} must encode an array of strings`, {
10
- cause: parsed.error,
11
- }));
12
- }
13
- catch (cause) {
14
- return err(new ConfigurationError(`${name} must be valid JSON`, { cause }));
15
- }
7
+ return parseConfiguredStringArray(encoded, name, z.string().min(1));
16
8
  };
9
+ /** Decode Hopper arguments while preserving meaningful empty argv entries. */
17
10
  export const parseLoaderArgs = (encoded) => {
18
11
  if (encoded === undefined)
19
12
  return ok([]);
20
- let decoded;
21
- try {
22
- decoded = JSON.parse(encoded);
23
- }
24
- catch (cause) {
25
- return err(new ConfigurationError("HOPPER_LOADER_ARGS_JSON must be valid JSON", {
26
- cause,
27
- }));
28
- }
29
- const parsed = z.array(z.string()).safeParse(decoded);
13
+ return parseConfiguredStringArray(encoded, "HOPPER_LOADER_ARGS_JSON", z.string());
14
+ };
15
+ const parseConfiguredStringArray = (encoded, setting, itemSchema) => {
16
+ const decoded = safeParseJson(encoded);
17
+ if (!decoded.ok)
18
+ return err(configuredArrayError(setting, "must be valid JSON", decoded.cause));
19
+ const parsed = z.array(itemSchema).safeParse(decoded.value);
30
20
  return parsed.success
31
21
  ? ok(parsed.data)
32
- : err(new ConfigurationError("HOPPER_LOADER_ARGS_JSON must encode an array of strings", { cause: parsed.error }));
22
+ : err(configuredArrayError(setting, "must encode an array of strings", parsed.error));
23
+ };
24
+ const configuredArrayError = (setting, requirement, cause) => {
25
+ const constraint = `${setting} ${requirement}`;
26
+ return new ConfigurationError(constraint, {
27
+ cause,
28
+ settings: [{ setting, constraint }],
29
+ });
33
30
  };
@@ -0,0 +1,56 @@
1
+ import { analysisViewResultSchema, inspectAnalysisViewInputSchema, } from "../domain/analysisView/analysisView.js";
2
+ import { toolContractMetadata } from "./toolEffects.js";
3
+ import { evidenceResultOf } from "./toolOutputSchemaPrimitives.js";
4
+ const RETAINED_EXAMPLE_ID = `ev_${"a".repeat(64)}`;
5
+ /** Selected views of already completed layout and JavaScript analysis Evidence. */
6
+ export const ANALYSIS_VIEW_TOOL_CONTRACTS = [
7
+ {
8
+ name: "inspect_analysis_view",
9
+ ...toolContractMetadata("inspect_analysis_view"),
10
+ kind: "application",
11
+ description: "Inspect a selected view of completed binary-layout or JavaScript application Evidence without repeating analysis. Use an exact same-session retained evidence_id or portable inline Evidence. Select a summary, layout mitigations/linkage facet, one section/symbol/module, or a stable page with a positive limit. Module pages contain JavaScript assets, bundled modules and source modules; use node_id when paths are ambiguous or unavailable. Returns selected facts inline with artifact identity, parent Evidence ID, a distinct view digest, coverage, limitations and unknowns. Actual serialized size determines MCP transport admission; choose a smaller page or export the retained Evidence when needed.",
12
+ inputSchema: inspectAnalysisViewInputSchema,
13
+ outputSchema: evidenceResultOf(analysisViewResultSchema),
14
+ examples: [
15
+ {
16
+ title: "Summarize retained JavaScript application Evidence",
17
+ input: {
18
+ source: {
19
+ kind: "retained-evidence",
20
+ evidence_id: RETAINED_EXAMPLE_ID,
21
+ },
22
+ view: { kind: "summary" },
23
+ },
24
+ },
25
+ {
26
+ title: "Read one ELF section from retained layout Evidence",
27
+ input: {
28
+ source: {
29
+ kind: "retained-evidence",
30
+ evidence_id: RETAINED_EXAMPLE_ID,
31
+ },
32
+ view: {
33
+ kind: "item",
34
+ collection: "sections",
35
+ selector: { name: ".text" },
36
+ },
37
+ },
38
+ },
39
+ {
40
+ title: "Page module identities from retained application Evidence",
41
+ input: {
42
+ source: {
43
+ kind: "retained-evidence",
44
+ evidence_id: RETAINED_EXAMPLE_ID,
45
+ },
46
+ view: {
47
+ kind: "page",
48
+ collection: "modules",
49
+ offset: 0,
50
+ limit: 32,
51
+ },
52
+ },
53
+ },
54
+ ],
55
+ },
56
+ ];
@@ -10,8 +10,9 @@ import { reconstructionObligationLedgerInputSchema, reconstructionObligationLedg
10
10
  import { androidApplicationProjectionInputSchema, androidApplicationProjectionResultSchema, } from "../domain/android/androidApplication.js";
11
11
  import { appleApplicationProjectionInputSchema, appleApplicationProjectionResultSchema, } from "../domain/apple/appleApplication.js";
12
12
  import { toolContractMetadata } from "./toolEffects.js";
13
- import { evidenceResultOf } from "./toolOutputSchemas.js";
14
- import { JAVASCRIPT_APPLICATION_VERSION_COMPARISON_EXAMPLE, JAVASCRIPT_EXPORT_SHAPE_COMPARISON_EXAMPLE, JAVASCRIPT_FEATURE_TRACE_EXAMPLE, SOURCE_TO_BUNDLE_COMPARISON_EXAMPLE, } from "./javascript/javascriptApplicationWorkflowExamples.js";
13
+ import { evidenceResultOf } from "./toolOutputSchemaPrimitives.js";
14
+ import { JAVASCRIPT_APPLICATION_VERSION_COMPARISON_EXAMPLE, JAVASCRIPT_FEATURE_TRACE_EXAMPLE, SOURCE_TO_BUNDLE_COMPARISON_EXAMPLE, } from "./javascript/javascriptApplicationWorkflowExamples.js";
15
+ import { JAVASCRIPT_EXPORT_SHAPE_COMPARISON_EXAMPLE } from "./javascript/javascriptExportShapeComparisonExample.js";
15
16
  import { ANDROID_APPLICATION_GRAPH_EXAMPLE, APPLE_APPLICATION_GRAPH_EXAMPLE, MACOS_APPLICATION_GRAPH_EXAMPLE, } from "./mobileApplicationGraphExamples.js";
16
17
  const traceOutputSchema = evidenceResultOf(applicationFeatureTraceResultSchema);
17
18
  const semanticTraceOutputSchema = evidenceResultOf(javaScriptSemanticTraceResultSchema);
@@ -106,13 +107,13 @@ export const APPLICATION_TOOL_CONTRACTS = [
106
107
  {
107
108
  name: "compare_javascript_export_shapes",
108
109
  ...toolContractMetadata("compare_javascript_export_shapes"),
109
- description: "Compare static return shapes for one exact module/export selector on each authenticated JavaScript Application Graph supplied as inline Evidence or exact same-session retained references. Variants pair only by reciprocal unique literal discriminants; dynamic values, incomplete properties, and ambiguous variants remain unknown. Reports JSON Pointer changes without executing JavaScript; runtime behavior requires a separate agent-run probe.",
110
+ description: "Compare static return shapes for one exact module/export selector on each authenticated JavaScript Application Graph supplied as inline Evidence or exact same-session retained references. Variants pair only by reciprocal unique literal discriminants. Each retained variant lists observed return-property names even when values stay unknown. Presence (present, absent, or unknown-coverage) is separate from value resolution: a name present on only one paired shape is added or removed when parent-property coverage is complete on both sides, including when the static value is unresolved. Dynamic values, incomplete parent coverage, and unpaired variants remain unknown. Reports JSON Pointer changes without executing JavaScript; runtime behavior requires a separate agent-run probe.",
110
111
  kind: "application",
111
112
  inputSchema: compareJavaScriptExportShapesRequestSchema,
112
113
  outputSchema: exportShapeComparisonOutputSchema,
113
114
  examples: [
114
115
  {
115
- title: "Compare one exact parser export without execution",
116
+ title: "Report observed return-property presence when static values stay unknown",
116
117
  input: JAVASCRIPT_EXPORT_SHAPE_COMPARISON_EXAMPLE,
117
118
  },
118
119
  {
@@ -8,13 +8,11 @@ const inventory = (digit) => {
8
8
  const nodes = [
9
9
  {
10
10
  artifact_id: artifactId,
11
- kind: "resource",
12
11
  format: "file",
13
12
  sha256: sha,
14
13
  size: 1,
15
14
  media_type: null,
16
15
  architecture: null,
17
- executable: false,
18
16
  content_state: "materialized",
19
17
  limitations: [],
20
18
  },
@@ -26,6 +24,8 @@ const inventory = (digit) => {
26
24
  parent_occurrence_id: null,
27
25
  logical_path: ".",
28
26
  entry_kind: "file",
27
+ artifact_kind: "resource",
28
+ artifact_format: "file",
29
29
  declared_size: 1,
30
30
  compressed_size: null,
31
31
  executable: false,
@@ -1,5 +1,5 @@
1
1
  import { z } from "zod";
2
- import { artifactOutputSchemas } from "./toolOutputSchemas.js";
2
+ import { artifactOutputSchemas } from "./toolOutputSchemaGroups.js";
3
3
  import { jsonValueSchema } from "../domain/jsonValue.js";
4
4
  import { toolContractMetadata } from "./toolEffects.js";
5
5
  import { requireOutputSchema } from "./toolOutputSchemaPrimitives.js";