rea-agents 6.1.0 → 6.3.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 (573) hide show
  1. package/README.md +24 -24
  2. package/bridge/ghidra/ReaGhidraBridge.java +32 -4
  3. package/bridge/hopper_bridge.py +8 -1
  4. package/dist/android/JadxConfiguration.js +87 -7
  5. package/dist/android/JadxMcpTransport.js +14 -2
  6. package/dist/android/JadxProvider.js +64 -36
  7. package/dist/android/JadxSession.js +51 -9
  8. package/dist/application/BinaryTargetResolver.js +68 -20
  9. package/dist/application/BrowserEvidence.js +3 -8
  10. package/dist/application/BrowserScenarioEvidence.js +4 -20
  11. package/dist/application/CapabilityInventory.js +43 -9
  12. package/dist/application/ClientConfigurationDocument.js +97 -25
  13. package/dist/application/ClientRegistrationStatus.js +19 -6
  14. package/dist/application/DirectAnalysis.js +41 -20
  15. package/dist/application/DirectAnalysisCleanup.js +71 -0
  16. package/dist/application/DirectAnalysisStatus.js +3 -7
  17. package/dist/application/Doctor.js +40 -53
  18. package/dist/application/DoctorDiagnostics.js +2 -3
  19. package/dist/application/EnhancedTools.js +51 -6
  20. package/dist/application/EvidenceBundleFiles.js +8 -3
  21. package/dist/application/InvestigationProviders.js +13 -5
  22. package/dist/application/JsonFiles.js +56 -23
  23. package/dist/application/LinuxHopper.js +11 -7
  24. package/dist/application/MacHopper.js +15 -18
  25. package/dist/application/RealHopperAssertions.js +0 -11
  26. package/dist/application/ReconstructionObligationCandidates.js +10 -3
  27. package/dist/application/ReconstructionObligationLedgerProjection.js +3 -1
  28. package/dist/application/ReferenceSourceImportEntries.js +1 -1
  29. package/dist/application/RegularFileRead.js +17 -0
  30. package/dist/application/Setup.js +26 -23
  31. package/dist/application/SetupClientConfiguration.js +18 -7
  32. package/dist/application/SetupHost.js +20 -29
  33. package/dist/application/SetupPlan.js +24 -20
  34. package/dist/application/SetupSkill.js +57 -8
  35. package/dist/application/SupportedClients.js +43 -0
  36. package/dist/application/Uninstall.js +98 -30
  37. package/dist/application/UpdateMaintenance.js +13 -7
  38. package/dist/application/UpdateRuntime.js +12 -12
  39. package/dist/application/Utf8JsonInput.js +64 -0
  40. package/dist/application/WebScriptExportService.js +38 -5
  41. package/dist/application/WorkflowEvidence.js +25 -2
  42. package/dist/application/XrefsAddressResolution.js +45 -0
  43. package/dist/application/analysisView/AnalysisViewService.js +76 -0
  44. package/dist/application/android/AndroidAnalysisService.js +1 -1
  45. package/dist/application/binary/AnalysisClientCleanup.js +30 -5
  46. package/dist/application/binary/AnalysisProviderEvaluation.js +1 -2
  47. package/dist/application/binary/AnalysisProviderRegistry.js +2 -6
  48. package/dist/application/binary/AnalysisSnapshotCache.js +13 -10
  49. package/dist/application/binary/BinarySession.js +86 -29
  50. package/dist/application/binary/BinarySessionComposition.js +1 -3
  51. package/dist/application/binary/BinarySessionExecution.js +3 -5
  52. package/dist/application/binary/BinarySessionOpen.js +10 -2
  53. package/dist/application/binary/BinarySessionRecords.js +1 -1
  54. package/dist/application/binary/BinarySessionStatus.js +1 -6
  55. package/dist/application/binary/CompositeProvider.js +4 -18
  56. package/dist/application/binary/LazyAnalysisProvider.js +5 -5
  57. package/dist/application/binary/SessionProviderRouter.js +27 -135
  58. package/dist/application/homebrew.js +48 -0
  59. package/dist/application/javascript/ElectronActiveEvidence.js +10 -14
  60. package/dist/application/javascript/ElectronBoundaryAnalysis.js +2 -2
  61. package/dist/application/javascript/ElectronBoundaryGraphNative.js +5 -1
  62. package/dist/application/javascript/JavaScriptApplicationEvidence.js +3 -6
  63. package/dist/application/javascript/JavaScriptApplicationEvidenceGraph.js +107 -46
  64. package/dist/application/javascript/JavaScriptApplicationService.js +7 -1
  65. package/dist/application/javascript/JavaScriptApplicationWorkflowService.js +59 -45
  66. package/dist/application/javascript/JavaScriptArtifactAnalysis.js +5 -9
  67. package/dist/application/javascript/JavaScriptArtifactGraphBuilder.js +19 -27
  68. package/dist/application/javascript/JavaScriptArtifactGraphBundlers.js +11 -3
  69. package/dist/application/javascript/JavaScriptArtifactGraphContext.js +9 -0
  70. package/dist/application/javascript/JavaScriptArtifactGraphDocuments.js +8 -5
  71. package/dist/application/javascript/JavaScriptArtifactGraphFindings.js +46 -29
  72. package/dist/application/javascript/JavaScriptArtifactGraphStructure.js +0 -1
  73. package/dist/application/javascript/JavaScriptArtifactPathResolution.js +86 -27
  74. package/dist/application/javascript/JavaScriptArtifactReconstruction.js +52 -9
  75. package/dist/application/javascript/JavaScriptArtifactReconstructionInput.js +1 -0
  76. package/dist/application/javascript/JavaScriptJsonModules.js +2 -2
  77. package/dist/application/javascript/JavaScriptModuleRelationships.js +6 -18
  78. package/dist/application/javascript/JavaScriptRuntimeObservationService.js +3 -3
  79. package/dist/application/javascript/JavaScriptRuntimeReconciliationService.js +11 -27
  80. package/dist/application/javascript/JavaScriptSemanticGraphAsyncProjection.js +4 -5
  81. package/dist/application/javascript/JavaScriptSemanticGraphBuilder.js +8 -6
  82. package/dist/application/javascript/JavaScriptSemanticGraphChildProcessProjection.js +2 -3
  83. package/dist/application/javascript/JavaScriptSemanticGraphConstruction.js +7 -5
  84. package/dist/application/javascript/JavaScriptSemanticGraphDataProjection.js +3 -4
  85. package/dist/application/javascript/JavaScriptSemanticGraphEvidence.js +1 -1
  86. package/dist/application/javascript/JavaScriptSemanticGraphFingerprintProjection.js +2 -2
  87. package/dist/application/javascript/JavaScriptSemanticGraphFlowProjection.js +3 -7
  88. package/dist/application/javascript/JavaScriptSemanticGraphObjectProjection.js +76 -47
  89. package/dist/application/javascript/JavaScriptSemanticGraphProjection.js +4 -4
  90. package/dist/application/javascript/JavaScriptSemanticGraphResourceProjection.js +3 -4
  91. package/dist/application/javascript/JavaScriptSemanticGraphValueProjection.js +51 -25
  92. package/dist/application/javascript/JavaScriptSemanticTraceService.js +15 -10
  93. package/dist/application/managed/ManagedMemberComparisonService.js +2 -1
  94. package/dist/application/managed/ManagedNativeVerificationService.js +2 -1
  95. package/dist/application/native/NativeCallRoutes.js +2 -4
  96. package/dist/application/process/ProcessCli.js +11 -11
  97. package/dist/application/process/ProcessEvidence.js +0 -1
  98. package/dist/artifacts/ArtifactProvider.js +53 -30
  99. package/dist/artifacts/ArtifactProviderMetadata.js +1 -4
  100. package/dist/artifacts/ArtifactReader.js +31 -0
  101. package/dist/artifacts/AsarArtifactReader.js +81 -17
  102. package/dist/artifacts/DirectoryArtifactReader.js +2 -1
  103. package/dist/artifacts/MachOSliceArtifactReader.js +9 -2
  104. package/dist/artifacts/NativeDmgArtifactReader.js +207 -77
  105. package/dist/artifacts/NativeDmgOwnership.js +109 -0
  106. package/dist/artifacts/SafeOutputTree.js +16 -2
  107. package/dist/artifacts/ZipArtifactReader.js +11 -4
  108. package/dist/artifacts/apple/AppleAssetCatalogAnalysis.js +4 -2
  109. package/dist/artifacts/apple/DylibResolutionReader.js +17 -7
  110. package/dist/artifacts/apple/KeyedArchiveReader.js +68 -42
  111. package/dist/artifacts/apple/MachoLoadCommandReader.js +36 -6
  112. package/dist/artifacts/extraction/ArtifactExtraction.js +104 -29
  113. package/dist/artifacts/inventory/ArtifactGraphConstruction.js +71 -66
  114. package/dist/artifacts/inventory/ArtifactInventory.js +0 -1
  115. package/dist/artifacts/inventory/classify.js +33 -14
  116. package/dist/artifacts/inventory/hashStableRootArtifact.js +37 -0
  117. package/dist/artifacts/inventory/reader.js +3 -3
  118. package/dist/artifacts/inventory/scanCanonical.js +64 -34
  119. package/dist/artifacts/inventory/scanReader.js +12 -20
  120. package/dist/artifacts/javascript/JavaScriptArtifactFiles.js +65 -27
  121. package/dist/browser/BrowserScenarioPartialObservation.js +106 -0
  122. package/dist/browser/CdpBrowserProvider.js +6 -6
  123. package/dist/browser/CdpCaptureEventHandlers.js +2 -4
  124. package/dist/browser/CdpCaptureEvents.js +0 -1
  125. package/dist/browser/CdpCaptureStorageFingerprints.js +3 -3
  126. package/dist/browser/CdpCaptureValues.js +20 -0
  127. package/dist/browser/CdpElectronInspection.js +2 -2
  128. package/dist/browser/CdpElectronProvider.js +4 -5
  129. package/dist/browser/CdpElectronScriptEvents.js +2 -8
  130. package/dist/browser/CdpElectronScripts.js +4 -5
  131. package/dist/browser/CdpPageCaptureScripts.js +2 -3
  132. package/dist/browser/CdpSafeMetadata.js +10 -10
  133. package/dist/browser/CdpWebMcpDiscovery.js +16 -13
  134. package/dist/browser/PlaywrightBrowserScenarioProvider.js +64 -49
  135. package/dist/browser/PlaywrightElectronActiveActions.js +2 -56
  136. package/dist/browser/PlaywrightElectronActiveProvider.js +10 -6
  137. package/dist/browser/PlaywrightScenarioArtifacts.js +1 -1
  138. package/dist/browser/PlaywrightScenarioBrowser.js +269 -66
  139. package/dist/browser/PlaywrightScenarioEvents.js +1 -1
  140. package/dist/browser/PlaywrightScenarioSession.js +41 -32
  141. package/dist/browser/WebSourceMapFetcher.js +32 -6
  142. package/dist/browser/assets/ScenarioScriptCapture.js +8 -12
  143. package/dist/browser/assets/ScriptCaptureAdapters.js +1 -1
  144. package/dist/browser/history/CaptureFailures.js +6 -2
  145. package/dist/browser/history/MitmproxyCaptureAdapter.js +4 -2
  146. package/dist/catalogIdentity.js +0 -1
  147. package/dist/cli/analysisViewCommands.js +36 -0
  148. package/dist/cli/artifactCommands.js +11 -12
  149. package/dist/cli/coreAnalysisCommands.js +3 -3
  150. package/dist/cli/coreBinaryCommands.js +37 -28
  151. package/dist/cli/coreNativeCommands.js +9 -10
  152. package/dist/cli/electronCommands.js +12 -13
  153. package/dist/cli/interactiveSetup.js +6 -6
  154. package/dist/cli/javascriptApplicationAnalysis.js +2 -12
  155. package/dist/cli/jsonOutput.js +3 -2
  156. package/dist/cli/managedCommands.js +7 -8
  157. package/dist/cli/nativeCallCommands.js +1 -2
  158. package/dist/cli/omittableDefaults.js +50 -0
  159. package/dist/cli/processCommands.js +3 -2
  160. package/dist/cli/setupCommands.js +16 -15
  161. package/dist/cli/streamedJsonOutput.js +83 -4
  162. package/dist/cli/utilityCommands.js +10 -12
  163. package/dist/cli.js +19 -8
  164. package/dist/cliBrowserScenarioCommands.js +2 -2
  165. package/dist/cliCommandNames.js +1 -0
  166. package/dist/cliJsonFile.js +179 -0
  167. package/dist/cliJsonInput.js +60 -33
  168. package/dist/cliObservationOptions.js +4 -0
  169. package/dist/cliOutput.js +0 -38
  170. package/dist/composition/auxiliaryAnalysisProviders.js +30 -25
  171. package/dist/composition/binary.js +9 -9
  172. package/dist/composition/browserScenario.js +2 -1
  173. package/dist/composition/directAnalysis.js +20 -14
  174. package/dist/composition/electronScenario.js +1 -1
  175. package/dist/composition/optionalObservationProviders.js +12 -7
  176. package/dist/config/environment.js +6 -0
  177. package/dist/config/ghidraStartupTimeout.js +4 -9
  178. package/dist/config/homeDirectory.js +12 -0
  179. package/dist/config/mcpResponseBudget.js +9 -1
  180. package/dist/config/parseConfig.js +7 -3
  181. package/dist/config/parsers.js +19 -22
  182. package/dist/contracts/analysisViewToolContracts.js +56 -0
  183. package/dist/contracts/applicationToolContracts.js +5 -4
  184. package/dist/contracts/artifactComparisonExample.js +7 -7
  185. package/dist/contracts/artifactToolContracts.js +1 -1
  186. package/dist/contracts/browserScenarioToolContracts.js +1 -1
  187. package/dist/contracts/browserToolContracts.js +19 -15
  188. package/dist/contracts/enhancedInputs.js +2 -2
  189. package/dist/contracts/enhancedToolContracts.js +4 -3
  190. package/dist/contracts/errorSchemas.js +3 -1
  191. package/dist/contracts/evm/evmToolContracts.js +1 -1
  192. package/dist/contracts/functionComparisonExample.js +8 -0
  193. package/dist/contracts/functionWorkflowToolContracts.js +1 -1
  194. package/dist/contracts/inputSchemaPresentation.js +181 -0
  195. package/dist/contracts/investigationExamples.js +4 -3
  196. package/dist/contracts/javascript/electronToolContracts.js +3 -2
  197. package/dist/contracts/javascript/javascriptApplicationWorkflowExamples.js +3 -22
  198. package/dist/contracts/javascript/javascriptExportShapeComparisonExample.js +248 -0
  199. package/dist/contracts/javascript/javascriptRuntimeObservationToolContracts.js +1 -1
  200. package/dist/contracts/javascript/javascriptRuntimeReconciliationExample.js +8 -7
  201. package/dist/contracts/managed/managedToolContracts.js +8 -12
  202. package/dist/contracts/managed/managedWorkflowToolContracts.js +1 -1
  203. package/dist/contracts/mobileApplicationGraphExamples.js +8 -8
  204. package/dist/contracts/native/binaryDiagnosticsToolContracts.js +1 -1
  205. package/dist/contracts/native/nativeToolContracts.js +2 -2
  206. package/dist/contracts/officialToolContracts.js +2 -1
  207. package/dist/contracts/promptContracts.js +2 -2
  208. package/dist/contracts/providerSelection.js +1 -1
  209. package/dist/contracts/sessionLifecycleInputs.js +4 -3
  210. package/dist/contracts/sessionStatusContract.js +3 -2
  211. package/dist/contracts/sessionToolContracts.js +17 -4
  212. package/dist/contracts/sessionToolSchemas.js +4 -16
  213. package/dist/contracts/toolContracts.js +2 -0
  214. package/dist/contracts/toolEffects.js +1 -0
  215. package/dist/contracts/toolOutputSchemaGroups.js +138 -94
  216. package/dist/contracts/toolOutputSchemaPrimitives.js +13 -26
  217. package/dist/contracts/toolSchemaMetadata.js +18 -69
  218. package/dist/contracts/webNetworkCaptureToolContracts.js +1 -1
  219. package/dist/contracts/webRuntimeToolContracts.js +1 -1
  220. package/dist/contracts/webScriptToolContracts.js +1 -1
  221. package/dist/doctorRuntime.js +7 -5
  222. package/dist/domain/analysisErrorBase.js +5 -0
  223. package/dist/domain/analysisErrorCore.js +3 -0
  224. package/dist/domain/analysisErrorPresentation.js +22 -5
  225. package/dist/domain/analysisErrorProjection.js +24 -5
  226. package/dist/domain/analysisSnapshot.js +31 -31
  227. package/dist/domain/analysisView/analysisView.js +241 -0
  228. package/dist/domain/analysisView/analysisViewCoverage.js +19 -0
  229. package/dist/domain/analysisView/binaryLayoutView.js +159 -0
  230. package/dist/domain/analysisView/javascriptApplicationView.js +238 -0
  231. package/dist/domain/android/androidApplication.js +1 -1
  232. package/dist/domain/android/androidPartialObservation.js +36 -0
  233. package/dist/domain/apple/appleApplication.js +1 -1
  234. package/dist/domain/apple/dylibResolution.js +10 -3
  235. package/dist/domain/apple/interfaceBuilderGraph.js +0 -1
  236. package/dist/domain/apple/keyedArchive.js +26 -2
  237. package/dist/domain/artifactComparison.js +15 -6
  238. package/dist/domain/artifactGraph.js +17 -4
  239. package/dist/domain/artifactIdentity.js +8 -8
  240. package/dist/domain/artifactInspection.js +8 -8
  241. package/dist/domain/artifactInventoryEvidence.js +9 -16
  242. package/dist/domain/artifactOperationError.js +3 -3
  243. package/dist/domain/artifactPartialObservation.js +1 -0
  244. package/dist/domain/artifactPathSyntax.js +49 -0
  245. package/dist/domain/binaryTarget.js +39 -13
  246. package/dist/domain/browserCaptureComparison.js +13 -49
  247. package/dist/domain/browserCompleteness.js +3 -2
  248. package/dist/domain/browserNetworkEvidence.js +10 -4
  249. package/dist/domain/browserObservation.js +0 -1
  250. package/dist/domain/browserObservationSchemas.js +14 -3
  251. package/dist/domain/browserScenario.js +0 -1
  252. package/dist/domain/browserScenarioCapture.js +1 -2
  253. package/dist/domain/browserScenarioCaptureValues.js +2 -2
  254. package/dist/domain/browserScenarioDiff.js +0 -2
  255. package/dist/domain/browserScenarioDiffEvidence.js +0 -12
  256. package/dist/domain/browserScenarioDiffValues.js +2 -2
  257. package/dist/domain/browserScenarioNormalization.js +3 -3
  258. package/dist/domain/browserScenarioValues.js +6 -6
  259. package/dist/domain/callPath.js +15 -18
  260. package/dist/domain/callPathSchemas.js +2 -2
  261. package/dist/domain/canonicalDigest.js +7 -1
  262. package/dist/domain/canonicalOrdering.js +1 -13
  263. package/dist/domain/changedBehavior.js +5 -6
  264. package/dist/domain/comparisonSemantics.js +0 -5
  265. package/dist/domain/completionLedgerGeneration.js +2 -1
  266. package/dist/domain/configurationErrors.js +12 -0
  267. package/dist/domain/conformancePackage.js +4 -3
  268. package/dist/domain/digests.js +0 -3
  269. package/dist/domain/evidence.js +19 -40
  270. package/dist/domain/evidenceBundle.js +58 -42
  271. package/dist/domain/evidenceCompletionLedger.js +2 -1
  272. package/dist/domain/firmware/firmwareAnalysis.js +4 -3
  273. package/dist/domain/functionComparison.js +6 -6
  274. package/dist/domain/functionComparisonDimensions.js +120 -87
  275. package/dist/domain/functionComparisonNormalization.js +26 -36
  276. package/dist/domain/functionComparisonResults.js +3 -6
  277. package/dist/domain/functionComparisonSchemas.js +2 -8
  278. package/dist/domain/functionDossierEvidence.js +4 -38
  279. package/dist/domain/hopperValues.js +11 -15
  280. package/dist/domain/javascript/electronActiveObservation.js +29 -71
  281. package/dist/domain/javascript/electronObservation.js +14 -3
  282. package/dist/domain/javascript/electronStaticAnalysisBrowser.js +12 -11
  283. package/dist/domain/javascript/electronStaticAnalysisIpc.js +11 -2
  284. package/dist/domain/javascript/electronStaticAnalysisNative.js +7 -4
  285. package/dist/domain/javascript/electronStaticAnalysisValues.js +8 -4
  286. package/dist/domain/javascript/javascriptApplicationAnalysis.js +3 -1
  287. package/dist/domain/javascript/javascriptApplicationChangeGraph.js +12 -8
  288. package/dist/domain/javascript/javascriptApplicationEvidenceSchemas.js +6 -0
  289. package/dist/domain/javascript/javascriptApplicationGraph.js +41 -16
  290. package/dist/domain/javascript/javascriptApplicationGraphSchemas.js +9 -2
  291. package/dist/domain/javascript/javascriptApplicationVersionComparison.js +4 -4
  292. package/dist/domain/javascript/javascriptApplicationVersionComparisonSchemas.js +37 -22
  293. package/dist/domain/javascript/javascriptApplicationVersionItems.js +50 -36
  294. package/dist/domain/javascript/javascriptApplicationVersionKeys.js +9 -8
  295. package/dist/domain/javascript/javascriptAstFingerprint.js +2 -2
  296. package/dist/domain/javascript/javascriptAstValues.js +22 -0
  297. package/dist/{application/javascript/JavaScriptReturnShapeProjection.js → domain/javascript/javascriptExportReturnShapeProjection.js} +4 -4
  298. package/dist/domain/javascript/javascriptExportShapeComparison.js +10 -3
  299. package/dist/domain/javascript/javascriptExportShapeComparisonIdentity.js +6 -1
  300. package/dist/domain/javascript/javascriptExportShapeComparisonSchemas.js +58 -22
  301. package/dist/domain/javascript/javascriptExportShapeSelection.js +7 -7
  302. package/dist/domain/javascript/javascriptExportShapeVariants.js +70 -16
  303. package/dist/domain/javascript/javascriptFeatureSeed.js +25 -3
  304. package/dist/domain/javascript/javascriptFeatureTrace.js +7 -6
  305. package/dist/domain/javascript/javascriptFeatureTraceSchemas.js +17 -9
  306. package/dist/domain/javascript/javascriptFeatureTraversal.js +4 -5
  307. package/dist/domain/javascript/javascriptNativeHandoff.js +7 -7
  308. package/dist/domain/javascript/javascriptRuntimeLoadState.js +0 -1
  309. package/dist/domain/javascript/javascriptRuntimeObservation.js +18 -7
  310. package/dist/domain/javascript/javascriptRuntimeReconciliation.js +12 -6
  311. package/dist/domain/javascript/javascriptRuntimeReconciliationActive.js +9 -8
  312. package/dist/domain/javascript/javascriptRuntimeReconciliationCaptureParsing.js +212 -0
  313. package/dist/domain/javascript/javascriptRuntimeReconciliationGraph.js +5 -4
  314. package/dist/domain/javascript/javascriptRuntimeReconciliationInputValidation.js +28 -0
  315. package/dist/domain/javascript/javascriptRuntimeReconciliationMatching.js +6 -6
  316. package/dist/domain/javascript/javascriptRuntimeReconciliationParsing.js +12 -222
  317. package/dist/domain/javascript/javascriptRuntimeReconciliationResult.js +2 -2
  318. package/dist/domain/javascript/javascriptRuntimeReconciliationRuntime.js +15 -4
  319. package/dist/domain/javascript/javascriptRuntimeReconciliationSchemas.js +2 -2
  320. package/dist/domain/javascript/javascriptRuntimeStaticCandidates.js +7 -7
  321. package/dist/domain/javascript/javascriptSemanticAnalysis.js +209 -11
  322. package/dist/domain/javascript/javascriptSemanticAsyncEffects.js +2 -1
  323. package/dist/domain/javascript/javascriptSemanticCallResolution.js +9 -7
  324. package/dist/domain/javascript/javascriptSemanticCalls.js +2 -1
  325. package/dist/domain/javascript/javascriptSemanticChildProcesses.js +4 -3
  326. package/dist/domain/javascript/javascriptSemanticCoverage.js +20 -0
  327. package/dist/domain/javascript/javascriptSemanticDataEffectHelpers.js +7 -9
  328. package/dist/domain/javascript/javascriptSemanticDataEffects.js +4 -11
  329. package/dist/domain/javascript/javascriptSemanticFingerprints.js +2 -2
  330. package/dist/domain/javascript/javascriptSemanticGraph.js +220 -71
  331. package/dist/domain/javascript/javascriptSemanticGraphSchemas.js +19 -1
  332. package/dist/domain/javascript/javascriptSemanticIr.js +0 -4
  333. package/dist/domain/javascript/javascriptSemanticIterationSources.js +106 -0
  334. package/dist/domain/javascript/javascriptSemanticMemberMutations.js +515 -74
  335. package/dist/domain/javascript/javascriptSemanticMutationInitializers.js +190 -0
  336. package/dist/domain/javascript/javascriptSemanticMutationValues.js +44 -36
  337. package/dist/domain/javascript/javascriptSemanticObjects.js +79 -42
  338. package/dist/domain/javascript/javascriptSemanticPrimitives.js +8 -14
  339. package/dist/domain/javascript/javascriptSemanticProjection.js +21 -16
  340. package/dist/domain/javascript/javascriptSemanticPromises.js +16 -21
  341. package/dist/domain/javascript/javascriptSemanticPropertyPaths.js +23 -0
  342. package/dist/domain/javascript/javascriptSemanticProvenance.js +3 -3
  343. package/dist/domain/javascript/javascriptSemanticQuery.js +8 -2
  344. package/dist/domain/javascript/javascriptSemanticQueryIdentity.js +3 -2
  345. package/dist/domain/javascript/javascriptSemanticQuerySchemas.js +8 -9
  346. package/dist/domain/javascript/javascriptSemanticRequireOrigin.js +16 -10
  347. package/dist/domain/javascript/javascriptSemanticResourceLimits.js +1 -1
  348. package/dist/domain/javascript/javascriptSemanticResources.js +1 -1
  349. package/dist/domain/javascript/javascriptSemanticReturns.js +55 -44
  350. package/dist/domain/javascript/javascriptSemanticSlots.js +72 -0
  351. package/dist/domain/javascript/javascriptSemanticTraversal.js +6 -1
  352. package/dist/domain/javascript/javascriptSemanticValues.js +180 -76
  353. package/dist/domain/javascript/javascriptSourceMapPaths.js +114 -0
  354. package/dist/domain/javascript/javascriptSourceParser.js +34 -9
  355. package/dist/domain/javascript/javascriptStaticAnalysisBundler.js +5 -6
  356. package/dist/domain/javascript/javascriptStaticAnalysisCalls.js +2 -1
  357. package/dist/domain/javascript/javascriptStaticAnalysisHelpers.js +26 -16
  358. package/dist/domain/javascript/sourceToBundleComparison.js +19 -8
  359. package/dist/domain/javascript/sourceToBundleSignals.js +53 -25
  360. package/dist/domain/jsonSerialization.js +109 -55
  361. package/dist/domain/jsonShape.js +46 -19
  362. package/dist/domain/localPath.js +10 -4
  363. package/dist/domain/managed/managedApplicationGraph.js +10 -6
  364. package/dist/domain/managed/managedApplicationGraphNodes.js +82 -57
  365. package/dist/domain/managed/managedArtifact.js +6 -4
  366. package/dist/domain/managed/managedMemberComparison.js +2 -9
  367. package/dist/domain/managed/managedMemberComparisonMatch.js +6 -7
  368. package/dist/domain/managed/managedNativeVerification.js +0 -2
  369. package/dist/domain/managed/managedNativeVerificationMatch.js +9 -3
  370. package/dist/domain/native/binaryLayout.js +2 -3
  371. package/dist/domain/native/nativeApiBoundary.js +1 -1
  372. package/dist/domain/native/nativeCallObservation.js +3 -3
  373. package/dist/domain/native/nativeInstruction.js +7 -0
  374. package/dist/domain/native/nativeValueFlow.js +5 -11
  375. package/dist/domain/native/objcSwiftMetadata.js +15 -17
  376. package/dist/domain/native/recordedCrash.js +2 -3
  377. package/dist/domain/offsetDateTime.js +17 -0
  378. package/dist/domain/process/processCapture.js +22 -20
  379. package/dist/domain/process/processCaptureCoverage.js +70 -0
  380. package/dist/domain/process/processCaptureExample.js +45 -1
  381. package/dist/domain/process/processCaptureParsing.js +1 -34
  382. package/dist/domain/process/processCaptureValidation.js +82 -13
  383. package/dist/domain/process/processComparison.js +39 -43
  384. package/dist/domain/process/processObservation.js +10 -2
  385. package/dist/domain/process/processScenario.js +24 -2
  386. package/dist/domain/process/processTraceComparison.js +0 -2
  387. package/dist/domain/process/processTraceDimensionProjection.js +1 -1
  388. package/dist/domain/process/processTraceEvaluation.js +19 -15
  389. package/dist/domain/process/processTraceSpecification.js +4 -7
  390. package/dist/domain/providerAdapterError.js +2 -0
  391. package/dist/domain/providerCleanupError.js +6 -2
  392. package/dist/domain/reconstructionCoverage.js +7 -3
  393. package/dist/domain/reconstructionObligationLedgerSchemas.js +2 -1
  394. package/dist/domain/reconstructionReadinessSchemas.js +2 -1
  395. package/dist/domain/reconstructionUnknowns.js +4 -3
  396. package/dist/domain/reconstructionVerification.js +6 -5
  397. package/dist/domain/reconstructionVerificationSchemas.js +2 -1
  398. package/dist/domain/referenceSourceGraph.js +27 -28
  399. package/dist/domain/referenceSourceImportParsing.js +34 -45
  400. package/dist/domain/residualUnknown.js +3 -2
  401. package/dist/domain/staticRuntimeCorrelation.js +4 -3
  402. package/dist/domain/stringPatterns.js +6 -0
  403. package/dist/domain/swiftSymbolClassification.js +66 -0
  404. package/dist/domain/symbolAnalysis.js +83 -20
  405. package/dist/domain/unicodeCodePointOrder.js +6 -0
  406. package/dist/domain/webBundleAnalyzerInspection.js +9 -1
  407. package/dist/domain/webCaptureDiff.js +71 -30
  408. package/dist/domain/webCaptureDiffSchemas.js +8 -11
  409. package/dist/domain/webEventListeners.js +3 -2
  410. package/dist/domain/webExecution.js +3 -2
  411. package/dist/domain/webInventory.js +3 -2
  412. package/dist/domain/webMcpDiscovery.js +4 -3
  413. package/dist/domain/webRuntime.js +0 -2
  414. package/dist/domain/webScriptExport.js +2 -2
  415. package/dist/dotnet/ManagedArtifactInspector.js +2 -19
  416. package/dist/dotnet/ManagedMemberInspector.js +12 -18
  417. package/dist/dotnet/ManagedMemberInspectorCore.js +47 -44
  418. package/dist/dotnet/ManagedMemberInstructionDecoder.js +1 -2
  419. package/dist/dotnet/ManagedMemberRows.js +75 -62
  420. package/dist/dotnet/ManagedMetadataInventory.js +16 -22
  421. package/dist/dotnet/ManagedMethodBodyReader.js +4 -0
  422. package/dist/dotnet/ManagedNativeBoundaryHelpers.js +109 -94
  423. package/dist/dotnet/ManagedNativeBoundaryInspector.js +12 -21
  424. package/dist/dotnet/ManagedReaderFailure.js +16 -0
  425. package/dist/dotnet/ManagedStaticProvider.js +13 -12
  426. package/dist/dotnet/ManagedStaticProviderMetadata.js +1 -4
  427. package/dist/evaluation/AgentEvaluationFixtures.js +250 -0
  428. package/dist/evaluation/AgentEvaluationReport.js +28 -0
  429. package/dist/evaluation/CodexAgentEval.js +12 -8
  430. package/dist/evaluation/KnownAnswerEvaluation.js +281 -0
  431. package/dist/evm/EvmoleInterfaceProvider.js +2 -1
  432. package/dist/filesystem/RegularFile.js +41 -0
  433. package/dist/firmware/FirmwareCommand.js +9 -5
  434. package/dist/firmware/FirmwareProvider.js +4 -4
  435. package/dist/generatedPackageMetadata.js +2 -2
  436. package/dist/ghidra/GhidraAnalysisProfile.js +3 -6
  437. package/dist/ghidra/GhidraClient.js +105 -36
  438. package/dist/ghidra/GhidraClientStartup.js +0 -2
  439. package/dist/ghidra/GhidraDoctor.js +6 -5
  440. package/dist/ghidra/GhidraFunctionValues.js +3 -5
  441. package/dist/ghidra/GhidraInstallation.js +151 -22
  442. package/dist/ghidra/GhidraJavaLaunch.js +6 -2
  443. package/dist/ghidra/GhidraLauncher.js +58 -26
  444. package/dist/ghidra/GhidraProvider.js +6 -2
  445. package/dist/ghidra/GhidraProviderCapabilities.js +6 -0
  446. package/dist/ghidra/GhidraProviderClient.js +13 -3
  447. package/dist/ghidra/GhidraSessionError.js +2 -0
  448. package/dist/ghidra/GhidraSessionRoot.js +39 -0
  449. package/dist/ghidra/extensions/GhidraExtensions.js +17 -10
  450. package/dist/ghidra/extensions/nativeaot/NativeAotAdapter.js +8 -2
  451. package/dist/hopper/BridgeLauncher.js +34 -45
  452. package/dist/hopper/HopperAnalysisProfile.js +3 -8
  453. package/dist/hopper/HopperCleanup.js +56 -27
  454. package/dist/hopper/HopperClient.js +86 -65
  455. package/dist/hopper/HopperMachOImage.js +3 -2
  456. package/dist/hopper/HopperProvider.js +16 -18
  457. package/dist/hopper/HopperRegexSearch.js +3 -6
  458. package/dist/hopper/HopperTargetLease.js +132 -49
  459. package/dist/hopper/LinuxPrivateDisplayProbe.js +6 -0
  460. package/dist/ida/IdaConfiguration.js +8 -3
  461. package/dist/ida/IdaInput.js +1 -7
  462. package/dist/ida/IdaMcpConnection.js +8 -4
  463. package/dist/ida/IdaOperationRunner.js +5 -3
  464. package/dist/ida/IdaProvider.js +8 -12
  465. package/dist/ida/IdaSessionClient.js +24 -20
  466. package/dist/ida/IdaWorkspace.js +12 -13
  467. package/dist/inspector/JavaScriptRuntimeScope.js +9 -5
  468. package/dist/inspector/V8InspectorCaptureProjection.js +47 -14
  469. package/dist/inspector/V8InspectorProvider.js +97 -35
  470. package/dist/javascript/recovery/WakaruCommand.js +7 -2
  471. package/dist/javascript/recovery/WakaruExecution.js +5 -2
  472. package/dist/main/shutdown.js +81 -29
  473. package/dist/main/startup.js +9 -2
  474. package/dist/main/transport.js +23 -3
  475. package/dist/main.js +11 -18
  476. package/dist/native/AppleMachoSelection.js +16 -6
  477. package/dist/native/AppleObjcDispatchFacets.js +3 -3
  478. package/dist/native/AppleObjcProperties.js +17 -7
  479. package/dist/native/CommandRunner.js +9 -7
  480. package/dist/native/LldbCallTracer.js +249 -77
  481. package/dist/native/NativeMacOSProvider.js +32 -17
  482. package/dist/native/NativeMacOSProviderMetadata.js +1 -2
  483. package/dist/native/NativeUiHelperRuntime.js +11 -2
  484. package/dist/native/NativeUiObservation.js +2 -2
  485. package/dist/native/pwntools/PwntoolsDecoder.js +2 -1
  486. package/dist/process/DarwinProcessRunTokenReader.js +16 -2
  487. package/dist/process/ExecFileOutput.js +88 -6
  488. package/dist/process/PrivateRuntimeRoot.js +10 -5
  489. package/dist/process/ProcessOwnership.js +1 -4
  490. package/dist/process/ProcessOwnershipObservation.js +18 -16
  491. package/dist/process/ProviderProcess.js +1 -3
  492. package/dist/process/capture/FilesystemSnapshot.js +131 -24
  493. package/dist/process/capture/ProcessCaptureError.js +13 -0
  494. package/dist/process/capture/ProcessCaptureLifecycle.js +148 -74
  495. package/dist/process/capture/ProcessFilesystemEffects.js +51 -6
  496. package/dist/process/capture/ProcessHarness.js +16 -33
  497. package/dist/process/capture/ProcessNormalization.js +20 -2
  498. package/dist/process/capture/ProcessSampling.js +25 -2
  499. package/dist/process/capture/TerminalRenderer.js +14 -0
  500. package/dist/process/snapshotEnvironment.js +14 -0
  501. package/dist/server/EvidenceMcpServer.js +25 -14
  502. package/dist/server/analysisAdmission.js +8 -0
  503. package/dist/server/createServer.js +71 -59
  504. package/dist/server/mcpClientMetadata.js +12 -5
  505. package/dist/server/promptCompletion.js +3 -8
  506. package/dist/server/registerAnalysisViewTool.js +15 -0
  507. package/dist/server/registerAndroidTools.js +2 -3
  508. package/dist/server/registerApplicationTools/compareExportShapes.js +6 -6
  509. package/dist/server/registerApplicationTools/compareSourceToBundle.js +4 -5
  510. package/dist/server/registerApplicationTools/compareVersions.js +4 -5
  511. package/dist/server/registerApplicationTools/coverage.js +1 -2
  512. package/dist/server/registerApplicationTools/helpers.js +4 -4
  513. package/dist/server/registerApplicationTools/obligationLedger.js +4 -5
  514. package/dist/server/registerApplicationTools/projectMobileApplicationGraph.js +3 -4
  515. package/dist/server/registerApplicationTools/traceFeature.js +4 -5
  516. package/dist/server/registerApplicationTools/traceSemantics.js +4 -5
  517. package/dist/server/registerArtifactComparisonTool.js +4 -5
  518. package/dist/server/registerArtifactTools.js +2 -2
  519. package/dist/server/registerBinaryDiagnosticsTools.js +2 -3
  520. package/dist/server/registerBrowserScenarioTool.js +3 -4
  521. package/dist/server/registerBrowserTools.js +13 -16
  522. package/dist/server/registerBundleComparisonTool.js +5 -6
  523. package/dist/server/registerCloseLifecycleTool.js +8 -7
  524. package/dist/server/registerElectronTools.js +10 -13
  525. package/dist/server/registerEnhancedTools.js +82 -77
  526. package/dist/server/registerEvidenceTools.js +54 -47
  527. package/dist/server/registerEvmTools.js +2 -3
  528. package/dist/server/registerFirmwareTools.js +2 -3
  529. package/dist/server/registerFunctionComparisonTool.js +7 -8
  530. package/dist/server/registerInvestigationTools.js +14 -15
  531. package/dist/server/registerJavaScriptRecoveryTool.js +2 -3
  532. package/dist/server/registerJavaScriptRuntimeObservationTools.js +6 -6
  533. package/dist/server/registerManagedTools.js +7 -4
  534. package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +5 -6
  535. package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +4 -5
  536. package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +6 -7
  537. package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +6 -7
  538. package/dist/server/registerOfficialTools.js +32 -41
  539. package/dist/server/registerProcessComparisonTool.js +8 -8
  540. package/dist/server/registerRecordedCrashTools.js +2 -3
  541. package/dist/server/registerSessionRecordTools.js +15 -19
  542. package/dist/server/registerSessionStatusTool.js +3 -4
  543. package/dist/server/registerSessionTools.js +19 -19
  544. package/dist/server/registerWebModuleTool.js +2 -3
  545. package/dist/server/registerWebNetworkCaptureTool.js +2 -3
  546. package/dist/server/registerWebRuntimeTools.js +4 -5
  547. package/dist/server/registerWebScriptTool.js +2 -3
  548. package/dist/server/registerWebSourceLocationTool.js +2 -3
  549. package/dist/server/toolResult.js +66 -94
  550. package/dist/server/toolResultEncoding.js +11 -10
  551. package/dist/windows/WindowsNativeLoader.js +1 -0
  552. package/dist/windows/WindowsOwnedProcess.js +60 -15
  553. package/dist/windows/WindowsPrivateRuntime.js +7 -8
  554. package/native/windows/README.md +3 -1
  555. package/native/windows/build/manifest.json +2 -2
  556. package/native/windows/build/rea-windows-x64.node +0 -0
  557. package/package.json +42 -30
  558. package/scripts/rea.mjs +3 -6
  559. package/skills/reverse-engineer-anything/SKILL.md +14 -13
  560. package/skills/reverse-engineer-anything/references/android-applications.md +6 -3
  561. package/skills/reverse-engineer-anything/references/evidence-workflows.md +8 -4
  562. package/skills/reverse-engineer-anything/references/javascript-applications.md +16 -6
  563. package/skills/reverse-engineer-anything/references/native-and-artifacts.md +18 -0
  564. package/dist/artifacts/inventory/policy.js +0 -2
  565. package/dist/config.js +0 -1
  566. package/dist/contracts/browserCaptureToolInputSchema.js +0 -43
  567. package/dist/contracts/process/processCaptureExample.js +0 -2
  568. package/dist/contracts/toolOutputSchemas.js +0 -2
  569. package/dist/domain/managed/managedApplicationGraphNodeCoverage.js +0 -6
  570. package/dist/main/reload.js +0 -12
  571. package/dist/main/state.js +0 -3
  572. package/dist/server/registerNativeTools.js +0 -6
  573. package/dist/server/sessionToolPolicies.js +0 -2
@@ -2,12 +2,13 @@ import { Cli, z } from "incur";
2
2
  import { captureProcessScenarioFile, compareProcessEvidenceFiles, isProcessCliFailure, } from "../application/process/ProcessCli.js";
3
3
  import { logCliCommand } from "../cliLogging.js";
4
4
  import { CLI_COMMANDS } from "../cliCommandNames.js";
5
+ import { withCommandCancellation } from "./commandCancellation.js";
5
6
  /** Register direct process capture and comparison commands. */
6
- export const registerProcessCommands = (cli, logger, environment = process.env) => {
7
+ export const registerProcessCommands = (cli, logger, environment) => {
7
8
  cli.command(CLI_COMMANDS.captureProcess, {
8
9
  description: "Capture one caller-selected process scenario",
9
10
  args: z.object({ scenario: z.string().describe("Scenario JSON path") }),
10
- run: ({ args }) => logCliCommand(logger, "capture-process", () => captureProcessScenarioFile(args.scenario, environment), isProcessCliFailure),
11
+ run: ({ args }) => withCommandCancellation((signal) => logCliCommand(logger, "capture-process", () => captureProcessScenarioFile(args.scenario, environment, signal), isProcessCliFailure)),
11
12
  });
12
13
  cli.command(CLI_COMMANDS.compareProcessCaptures, {
13
14
  description: "Compare two process capture Evidence JSON files",
@@ -3,7 +3,8 @@ import { DOCTOR_PROVIDER_IDS, runDoctor, } from "../application/Doctor.js";
3
3
  import { isSetupFailure, } from "../application/SetupTypes.js";
4
4
  import { runSetup } from "../application/Setup.js";
5
5
  import { systemSetupHost } from "../application/SetupHost.js";
6
- import { isUninstallFailure, runUninstall } from "../application/Uninstall.js";
6
+ import { isUninstallFailure, runUninstall, systemUninstallHost, } from "../application/Uninstall.js";
7
+ import { homeDirectoryFromEnvironment } from "../config/homeDirectory.js";
7
8
  import { isUpdateFailure, runUpdate } from "../application/Update.js";
8
9
  import { systemUpdateHost } from "../application/UpdateRuntime.js";
9
10
  import { confirmInteractiveSetup, renderInteractiveSetupResult, renderSetupProgress, } from "./interactiveSetup.js";
@@ -17,12 +18,12 @@ const supportedClientSchema = z
17
18
  .string()
18
19
  .refine((candidate) => supportedClientIds.some((name) => name === candidate), "Unsupported agent integration");
19
20
  /** Register setup, doctor, uninstall, and update CLI commands. */
20
- export const registerSetupCommands = (cli, logger) => {
21
- registerSetupCommand(cli, logger);
22
- registerDoctorCommand(cli, logger);
23
- registerMaintenanceCommands(cli, logger);
21
+ export const registerSetupCommands = (cli, logger, environment) => {
22
+ registerSetupCommand(cli, logger, environment);
23
+ registerDoctorCommand(cli, logger, environment);
24
+ registerMaintenanceCommands(cli, logger, environment);
24
25
  };
25
- const registerSetupCommand = (cli, logger) => {
26
+ const registerSetupCommand = (cli, logger, environment) => {
26
27
  cli.command(CLI_COMMANDS.setup, {
27
28
  description: "Configure agent integrations and optional analysis providers",
28
29
  outputPolicy: "agent-only",
@@ -57,10 +58,10 @@ const registerSetupCommand = (cli, logger) => {
57
58
  .describe("Use sequential accessible setup prompts"),
58
59
  }),
59
60
  alias: { yes: "y" },
60
- run: ({ options, formatExplicit }) => logCliCommand(logger, CLI_COMMANDS.setup, () => runSetupCommand({ options, formatExplicit }), isSetupFailure),
61
+ run: ({ options, formatExplicit }) => logCliCommand(logger, CLI_COMMANDS.setup, () => runSetupCommand({ options, formatExplicit }, environment), isSetupFailure),
61
62
  });
62
63
  };
63
- const registerDoctorCommand = (cli, logger) => {
64
+ const registerDoctorCommand = (cli, logger, environment) => {
64
65
  cli.command(CLI_COMMANDS.doctor, {
65
66
  description: "Check whether REA is ready",
66
67
  options: z.object({
@@ -78,10 +79,10 @@ const registerDoctorCommand = (cli, logger) => {
78
79
  .optional()
79
80
  .describe("Require the installed REA skill identity to be aligned"),
80
81
  }),
81
- run: ({ options }) => logCliCommand(logger, "doctor", () => runDoctor(options.target, createSystemDoctorHost(), doctorScope(options))),
82
+ run: ({ options }) => logCliCommand(logger, "doctor", () => runDoctor(options.target, createSystemDoctorHost(environment), doctorScope(options))),
82
83
  });
83
84
  };
84
- const registerMaintenanceCommands = (cli, logger) => {
85
+ const registerMaintenanceCommands = (cli, logger, environment) => {
85
86
  cli.command(CLI_COMMANDS.uninstall, {
86
87
  description: "Remove REA-owned agent configuration and skill files",
87
88
  options: z.object({
@@ -91,22 +92,22 @@ const registerMaintenanceCommands = (cli, logger) => {
91
92
  .describe("Also remove REA caches and state"),
92
93
  }),
93
94
  alias: { purgeData: "purge-data" },
94
- run: ({ options }) => logCliCommand(logger, "uninstall", () => runUninstall(options.purgeData), isUninstallFailure),
95
+ run: ({ options }) => logCliCommand(logger, "uninstall", () => runUninstall(options.purgeData, systemUninstallHost(homeDirectoryFromEnvironment(environment, process.platform), undefined, environment)), isUninstallFailure),
95
96
  });
96
97
  cli.command(CLI_COMMANDS.update, {
97
98
  description: "Update this REA installation and verify the installed release",
98
- run: ({ formatExplicit }) => logCliCommand(logger, CLI_COMMANDS.update, () => runUpdate(PRODUCT_IDENTITY.packageVersion, systemUpdateHost(), formatExplicit ? "structured" : "human"), isUpdateFailure),
99
+ run: ({ formatExplicit }) => logCliCommand(logger, CLI_COMMANDS.update, () => runUpdate(PRODUCT_IDENTITY.packageVersion, systemUpdateHost(undefined, undefined, environment), formatExplicit ? "structured" : "human"), isUpdateFailure),
99
100
  });
100
101
  };
101
- const runSetupCommand = async (input) => {
102
+ const runSetupCommand = async (input, environment) => {
102
103
  const { options } = input;
103
104
  const interactive = setupIsInteractive(options, input.formatExplicit);
104
105
  const hasExplicitScope = setupHasExplicitScope(options);
105
- const result = await runSetup(setupRunOptions(input, interactive, hasExplicitScope), systemSetupHost(createSystemDoctorHost()), interactive
106
+ const result = await runSetup(setupRunOptions(input, interactive, hasExplicitScope), systemSetupHost(createSystemDoctorHost(environment), environment), interactive
106
107
  ? (actions, context) => confirmInteractiveSetup(actions, options.accessible, context)
107
108
  : undefined);
108
109
  if (interactive)
109
- renderInteractiveSetupResult(result);
110
+ renderInteractiveSetupResult(result, environment);
110
111
  return result;
111
112
  };
112
113
  const setupRunOptions = (input, interactive, hasExplicitScope) => {
@@ -1,18 +1,70 @@
1
+ import { constants } from "node:buffer";
1
2
  import {} from "node:stream";
2
- import { Filter } from "incur";
3
+ import { Cli, Filter } from "incur";
3
4
  import { parseCliOutputArguments } from "../cliOutput.js";
4
- import { writeJsonOutput } from "./jsonOutput.js";
5
+ import { AnalysisResourceConstraintError } from "../domain/analysisErrorCore.js";
6
+ import { projectAnalysisError, } from "../domain/analysisErrorProjection.js";
7
+ import { jsonOutputParts, writeJsonOutput } from "./jsonOutput.js";
8
+ const registeredCommands = Cli.toCommands;
9
+ /** Install formatting once, after registration, for every ordinary CLI result. */
10
+ export const streamCliCommandResults = (cli, output) => {
11
+ const commands = registeredCommands.get(cli);
12
+ if (commands !== undefined)
13
+ wrapCommands(commands, [], output);
14
+ };
15
+ const wrapCommands = (commands, parents, output) => {
16
+ for (const [name, entry] of commands) {
17
+ const path = [...parents, name];
18
+ if ("_group" in entry) {
19
+ wrapCommands(entry.commands, path, output);
20
+ if (entry.root !== undefined)
21
+ wrapCommand(entry.root, path.join(" "), output);
22
+ }
23
+ else if (!("_alias" in entry) && !("_fetch" in entry))
24
+ wrapCommand(entry, path.join(" "), output);
25
+ }
26
+ };
27
+ const wrapCommand = (command, name, output) => {
28
+ const run = command.run;
29
+ command.run = (context) => {
30
+ const started = performance.now();
31
+ const result = run(context);
32
+ // Generator results and Incur's sentinel responses retain their own protocol.
33
+ if (typeof result === "object" &&
34
+ result !== null &&
35
+ Symbol.asyncIterator in result)
36
+ return result;
37
+ return Promise.resolve(result).then(async (value) => {
38
+ if (typeof value === "object" &&
39
+ value !== null &&
40
+ Symbol.for("incur.sentinel") in value)
41
+ return value;
42
+ if (!(await output.write(value, {
43
+ command: name,
44
+ format: context.format,
45
+ duration: `${Math.round(performance.now() - started)}ms`,
46
+ })))
47
+ return value;
48
+ if (output.error !== undefined)
49
+ return context.error({
50
+ code: output.error.code,
51
+ message: output.error.message,
52
+ });
53
+ return undefined;
54
+ });
55
+ };
56
+ };
5
57
  /** Preserve Incur's JSON controls while streaming the complete result. */
6
58
  export const createStreamedCliJsonOutput = (arguments_, destination) => {
7
59
  const options = parseCliOutputArguments(arguments_);
8
60
  if (options.parseError ||
9
- options.tokenCount ||
10
61
  options.tokenWindow ||
11
62
  (options.format !== "json" && options.format !== "jsonl"))
12
63
  return undefined;
13
64
  const format = options.format;
14
65
  let handled = false;
15
66
  let failed = false;
67
+ let error;
16
68
  return {
17
69
  get handled() {
18
70
  return handled;
@@ -20,6 +72,9 @@ export const createStreamedCliJsonOutput = (arguments_, destination) => {
20
72
  get failed() {
21
73
  return failed;
22
74
  },
75
+ get error() {
76
+ return error;
77
+ },
23
78
  async write(value, metadata) {
24
79
  if (metadata.format !== format)
25
80
  return false;
@@ -30,6 +85,26 @@ export const createStreamedCliJsonOutput = (arguments_, destination) => {
30
85
  command: metadata.command,
31
86
  duration: metadata.duration,
32
87
  };
88
+ if (options.tokenCount) {
89
+ // Incur/tokenx materialize the formatted value. Measure its UTF-16
90
+ // expansion before allowing that allocation, independently of UTF-8 bytes.
91
+ let characters = 0;
92
+ if (filtered !== undefined &&
93
+ filtered !== null &&
94
+ typeof filtered !== "function" &&
95
+ typeof filtered !== "symbol")
96
+ for (const part of jsonOutputParts(filtered, format))
97
+ characters += part.length;
98
+ characters = Math.max(0, characters - 1);
99
+ if (characters <= constants.MAX_STRING_LENGTH)
100
+ return false;
101
+ error = projectAnalysisError(new AnalysisResourceConstraintError(metadata.command, "memory", "Token counting requires a formatted string larger than the runtime permits.", {
102
+ formatted_characters: characters,
103
+ max_string_characters: constants.MAX_STRING_LENGTH,
104
+ }, {
105
+ remediationAction: "Remove --token-count to stream the complete JSON result, or narrow it with --filter-output.",
106
+ }));
107
+ }
33
108
  const document = options.fullOutput
34
109
  ? filtered === undefined
35
110
  ? { ok: true, meta }
@@ -44,7 +119,11 @@ export const createStreamedCliJsonOutput = (arguments_, destination) => {
44
119
  // document from Incur's error formatter.
45
120
  handled = true;
46
121
  try {
47
- await writeJsonOutput(document, destination, format);
122
+ await writeJsonOutput(error === undefined
123
+ ? document
124
+ : options.fullOutput
125
+ ? { ok: false, error, meta }
126
+ : error, destination, format);
48
127
  }
49
128
  catch (cause) {
50
129
  failed = true;
@@ -1,8 +1,7 @@
1
1
  import { z } from "incur";
2
- import { runCapabilityStatus, runProviderAnalysis, runProviderStatus, } from "../composition/directAnalysis.js";
3
2
  import { importReferenceSource } from "../application/ReferenceSourceImport.js";
4
3
  import { projectReferenceSourceImportError } from "../application/ReferenceSourceImportTypes.js";
5
- import { parseConfig } from "../config.js";
4
+ import { parseConfig } from "../config/parseConfig.js";
6
5
  import { projectAnalysisError } from "../domain/analysisErrorProjection.js";
7
6
  import { AnalysisInputError } from "../domain/analysisErrorCore.js";
8
7
  import { projectInputIssues } from "../domain/inputIssueProjection.js";
@@ -14,10 +13,11 @@ import { CLI_COMMANDS } from "../cliCommandNames.js";
14
13
  import { swiftSymbolsSchema } from "../contracts/native/nativeToolContracts.js";
15
14
  import { isReferenceSourceImportCliFailure } from "./referenceSourceImportStatus.js";
16
15
  import { registerNativeCallCommands } from "./nativeCallCommands.js";
17
- export const registerUtilityCommands = (cli, logger, environment = process.env) => {
18
- registerCapabilityCommands(cli, logger);
19
- registerNativeCommands(cli, logger);
20
- registerNativeCallCommands(cli, logger);
16
+ export const registerUtilityCommands = (cli, logger, environment, analysis) => {
17
+ const { runProviderAnalysis } = analysis;
18
+ registerCapabilityCommands(cli, logger, analysis);
19
+ registerNativeCommands(cli, logger, runProviderAnalysis);
20
+ registerNativeCallCommands(cli, logger, runProviderAnalysis);
21
21
  for (const [command, operation] of [
22
22
  [CLI_COMMANDS.observeNativeUi, "observe_native_ui"],
23
23
  [CLI_COMMANDS.captureNativeUiScenario, "capture_native_ui_scenario"],
@@ -97,7 +97,7 @@ const invalidNativeUiScenarioInput = (operation, issues) => ({
97
97
  error: "Application workflow failed",
98
98
  ...projectAnalysisError(new AnalysisInputError(operation, undefined, issues)),
99
99
  });
100
- const registerCapabilityCommands = (cli, logger) => {
100
+ const registerCapabilityCommands = (cli, logger, { runSessionStatus }) => {
101
101
  for (const command of [
102
102
  CLI_COMMANDS.capabilities,
103
103
  CLI_COMMANDS.providers,
@@ -106,13 +106,11 @@ const registerCapabilityCommands = (cli, logger) => {
106
106
  description: command === "capabilities"
107
107
  ? "List provider capabilities and side effects"
108
108
  : "List configured analysis providers",
109
- run: () => logCliCommand(logger, command, () => command === CLI_COMMANDS.providers
110
- ? runProviderStatus(logger)
111
- : runCapabilityStatus(logger)),
109
+ run: () => logCliCommand(logger, command, () => runSessionStatus(logger)),
112
110
  });
113
111
  }
114
112
  };
115
- const registerNativeCommands = (cli, logger) => {
113
+ const registerNativeCommands = (cli, logger, runProviderAnalysis) => {
116
114
  for (const [command, tool] of [
117
115
  [CLI_COMMANDS.inspectMacho, "inspect_macho"],
118
116
  [CLI_COMMANDS.inspectSignature, "inspect_signature"],
@@ -147,7 +145,7 @@ const registerNativeCommands = (cli, logger) => {
147
145
  run: ({ args }) => logCliCommand(logger, "demangle-swift", () => runProviderAnalysis(args.path, "demangle_swift", { symbols: args.symbols }, logger)),
148
146
  });
149
147
  };
150
- const registerReferenceSourceCommand = (cli, logger, environment = process.env) => {
148
+ const registerReferenceSourceCommand = (cli, logger, environment) => {
151
149
  cli.command(CLI_COMMANDS.importReferenceSource, {
152
150
  description: "Import a source tree as historical reference only",
153
151
  args: z.object({
package/dist/cli.js CHANGED
@@ -1,4 +1,7 @@
1
+ import { snapshotEnvironment } from "./process/snapshotEnvironment.js";
2
+ import { createDirectAnalysis } from "./composition/directAnalysis.js";
1
3
  import { registerEvmCommands } from "./cli/evmCommands.js";
4
+ import { registerAnalysisViewCommands } from "./cli/analysisViewCommands.js";
2
5
  import { registerBinaryDiagnosticsCommands } from "./cli/binaryDiagnosticsCommands.js";
3
6
  import { Cli } from "incur";
4
7
  import { createLogger, parseLogLevel } from "./logger.js";
@@ -25,12 +28,16 @@ import { registerBrowserScenarioCommands } from "./cliBrowserScenarioCommands.js
25
28
  import { registerElectronCommands } from "./cli/electronCommands.js";
26
29
  import { registerJavaScriptRuntimeObservationCommands } from "./cliJavaScriptRuntimeCommands.js";
27
30
  import { registerApplicationCommands } from "./cli/applicationCommands.js";
31
+ import { presentOmittableDefaults } from "./cli/omittableDefaults.js";
32
+ import { streamCliCommandResults, } from "./cli/streamedJsonOutput.js";
28
33
  /**
29
34
  * Build the one-shot Incur CLI without starting Hopper at import time.
30
35
  * Analysis commands acquire and close their own sessions; bare `mcp` and
31
36
  * `--mcp` are intercepted by the executable dispatcher before this module loads.
32
37
  */
33
- export const createCli = (environment = process.env, resultOutput) => {
38
+ export const createCli = (selectedEnvironment = process.env, resultOutput) => {
39
+ const environment = snapshotEnvironment(selectedEnvironment);
40
+ const analysis = createDirectAnalysis(environment);
34
41
  const logger = createLogger("cli", environment.REA_LOG_LEVEL === undefined
35
42
  ? "silent"
36
43
  : parseLogLevel(environment.REA_LOG_LEVEL));
@@ -43,15 +50,16 @@ export const createCli = (environment = process.env, resultOutput) => {
43
50
  },
44
51
  sync: false,
45
52
  });
46
- registerSetupCommands(cli, logger);
47
- registerCoreAnalysisCommands(cli, logger, resultOutput);
48
- registerUtilityCommands(cli, logger, environment);
53
+ registerSetupCommands(cli, logger, environment);
54
+ registerCoreAnalysisCommands(cli, logger, analysis.runDirectAnalysis);
55
+ registerUtilityCommands(cli, logger, environment, analysis);
49
56
  registerEvmCommands(cli, logger, environment);
50
- registerArtifactCommands(cli, logger);
51
- registerManagedCommands(cli, logger);
57
+ registerArtifactCommands(cli, logger, analysis.runProviderAnalysis);
58
+ registerManagedCommands(cli, logger, analysis.runProviderAnalysis);
52
59
  registerAndroidCommands(cli, logger, environment);
53
60
  registerFirmwareCommands(cli, logger, environment);
54
61
  registerBinaryDiagnosticsCommands(cli, logger, environment);
62
+ registerAnalysisViewCommands(cli, logger);
55
63
  registerEvidenceCommands(cli, logger);
56
64
  registerProcessCommands(cli, logger, environment);
57
65
  registerBrowserCommands(cli, logger);
@@ -62,9 +70,12 @@ export const createCli = (environment = process.env, resultOutput) => {
62
70
  registerWebNetworkCaptureCommands(cli, logger, environment);
63
71
  registerJavaScriptRecoveryCommands(cli, logger, environment);
64
72
  registerAdvancedBrowserCommands(cli, logger);
65
- registerBrowserScenarioCommands(cli, logger);
66
- registerElectronCommands(cli, logger, resultOutput);
73
+ registerBrowserScenarioCommands(cli, logger, environment);
74
+ registerElectronCommands(cli, logger, environment);
67
75
  registerJavaScriptRuntimeObservationCommands(cli, logger);
68
76
  registerApplicationCommands(cli, logger);
77
+ presentOmittableDefaults(cli);
78
+ if (resultOutput !== undefined)
79
+ streamCliCommandResults(cli, resultOutput);
69
80
  return cli;
70
81
  };
@@ -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",
@@ -0,0 +1,179 @@
1
+ import { constants } from "node:buffer";
2
+ import { pipeline } from "node:stream/promises";
3
+ import { getHeapStatistics } from "node:v8";
4
+ import parser from "stream-json/parser.js";
5
+ import streamValues from "stream-json/streamers/stream-values.js";
6
+ import { withRegularFile } from "./application/RegularFileRead.js";
7
+ import { JSON_INPUT_RESOURCE_REMEDIATION, parseUtf8Json, } from "./application/Utf8JsonInput.js";
8
+ import { AnalysisInputError, AnalysisResourceConstraintError, } from "./domain/analysisErrorCore.js";
9
+ import { err, ok } from "./domain/result.js";
10
+ const READ_CHUNK_BYTES = 64 * 1024;
11
+ const PACKED_STRING_PART_CODE_UNITS = 64 * 1024;
12
+ // Retain native-parser speed for modest inputs while bounding its extra copies.
13
+ // This selects an implementation; larger files remain accepted through streaming.
14
+ const NATIVE_PARSE_READ_BUDGET = 8 * 1024 * 1024;
15
+ /** Parse strict UTF-8 JSON without requiring a whole-document string. */
16
+ export const readCliJsonFile = (path, operation, signal) => withRegularFile(path, async (handle, stats) => {
17
+ let found = false;
18
+ let value;
19
+ try {
20
+ const prefix = stats.size <= NATIVE_PARSE_READ_BUDGET
21
+ ? await readPrefix(handle, stats.size + 1, signal)
22
+ : undefined;
23
+ if (prefix?.complete === true) {
24
+ const parsed = parseUtf8Json(prefix.bytes, operation, path, "cli-json-input");
25
+ return parsed.ok
26
+ ? ok(parsed.value)
27
+ : err(invalidJson(operation, parsed.error, parsed.cause));
28
+ }
29
+ await pipeline(decodedChunks(handle, signal, prefix?.bytes), parser.asStream({
30
+ jsonStreaming: false,
31
+ streamValues: false,
32
+ packKeys: false,
33
+ packStrings: false,
34
+ }), packJsonStrings(operation, stats.size), streamValues.asStream(), async (rows) => {
35
+ for await (const row of rows) {
36
+ if (found ||
37
+ typeof row !== "object" ||
38
+ row === null ||
39
+ !("key" in row) ||
40
+ row.key !== 0 ||
41
+ !("value" in row))
42
+ throw new Error("Unexpected JSON parser result");
43
+ found = true;
44
+ value = row.value;
45
+ }
46
+ }, signal === undefined ? {} : { signal });
47
+ return found
48
+ ? ok(value)
49
+ : err(invalidJson(operation, "JSON document is empty"));
50
+ }
51
+ catch (cause) {
52
+ if (cause instanceof AnalysisResourceConstraintError)
53
+ return err(cause);
54
+ if (cause instanceof TypeError &&
55
+ "code" in cause &&
56
+ cause.code === "ERR_ENCODING_INVALID_ENCODED_DATA")
57
+ return err(invalidJson(operation, "JSON input is not valid UTF-8", cause));
58
+ if (cause instanceof SyntaxError ||
59
+ (cause instanceof Error && cause.message.startsWith("Parser ")))
60
+ return err(invalidJson(operation, cause.message, cause));
61
+ if (cause instanceof Error &&
62
+ ((cause instanceof RangeError &&
63
+ cause.message === "Invalid string length") ||
64
+ ("code" in cause && cause.code === "ERR_STRING_TOO_LONG")))
65
+ return err(new AnalysisResourceConstraintError(operation, "memory", "An individual JSON string exceeds the runtime string limit", {
66
+ input_file_bytes: stats.size,
67
+ max_string_code_units: constants.MAX_STRING_LENGTH,
68
+ }, {
69
+ cause,
70
+ remediationAction: JSON_INPUT_RESOURCE_REMEDIATION,
71
+ }));
72
+ throw cause;
73
+ }
74
+ }, signal);
75
+ const packJsonStrings = (operation, inputFileBytes) => async function* (tokens) {
76
+ let kind;
77
+ let length = 0;
78
+ let value = "";
79
+ let parts = [];
80
+ let partLength = 0;
81
+ for await (const token of tokens) {
82
+ if (typeof token !== "object" || token === null || !("name" in token))
83
+ throw new Error("Unexpected JSON parser token");
84
+ switch (token.name) {
85
+ case "startKey":
86
+ case "startString":
87
+ kind = token.name === "startKey" ? "keyValue" : "stringValue";
88
+ break;
89
+ case "stringChunk":
90
+ if (kind === undefined ||
91
+ !("value" in token) ||
92
+ typeof token.value !== "string")
93
+ throw new Error("Unexpected JSON string fragment");
94
+ length += token.value.length;
95
+ if (length > constants.MAX_STRING_LENGTH)
96
+ throw new RangeError("Invalid string length");
97
+ parts.push(token.value);
98
+ partLength += token.value.length;
99
+ if (partLength >= PACKED_STRING_PART_CODE_UNITS) {
100
+ // The tokenizer emits short fragments. Coalesce them before retaining
101
+ // a string so millions of substring/rope nodes cannot exhaust the heap
102
+ // before the native string-length constraint can be reported.
103
+ requireStringAssemblyHeadroom(operation, inputFileBytes, length);
104
+ value += parts.join("");
105
+ parts = [];
106
+ partLength = 0;
107
+ }
108
+ break;
109
+ case "endKey":
110
+ case "endString":
111
+ if (kind === undefined)
112
+ throw new Error("Unexpected JSON string end");
113
+ requireStringAssemblyHeadroom(operation, inputFileBytes, length);
114
+ yield { name: kind, value: value + parts.join("") };
115
+ kind = undefined;
116
+ length = 0;
117
+ value = "";
118
+ parts = [];
119
+ partLength = 0;
120
+ break;
121
+ default:
122
+ yield token;
123
+ }
124
+ }
125
+ };
126
+ const requireStringAssemblyHeadroom = (operation, inputFileBytes, stringCodeUnits) => {
127
+ if (stringCodeUnits < PACKED_STRING_PART_CODE_UNITS)
128
+ return;
129
+ const heap = getHeapStatistics();
130
+ // Concatenation or key interning may flatten the retained rope. Reserve its
131
+ // UTF-16 representation and the next coalesced part before that allocation.
132
+ const requiredBytes = 2 * (stringCodeUnits + PACKED_STRING_PART_CODE_UNITS);
133
+ if (requiredBytes > heap.total_available_size)
134
+ throw new AnalysisResourceConstraintError(operation, "memory", "Insufficient heap headroom to assemble a complete JSON string", {
135
+ input_file_bytes: inputFileBytes,
136
+ string_code_units: stringCodeUnits,
137
+ string_assembly_headroom_bytes: requiredBytes,
138
+ available_heap_bytes: heap.total_available_size,
139
+ heap_size_limit_bytes: heap.heap_size_limit,
140
+ }, {
141
+ remediationAction: JSON_INPUT_RESOURCE_REMEDIATION,
142
+ });
143
+ };
144
+ async function* decodedChunks(handle, signal, prefix) {
145
+ const decoder = new TextDecoder("utf-8", { fatal: true, ignoreBOM: true });
146
+ if (prefix !== undefined)
147
+ for (let offset = 0; offset < prefix.length; offset += READ_CHUNK_BYTES) {
148
+ signal?.throwIfAborted();
149
+ yield decoder.decode(prefix.subarray(offset, offset + READ_CHUNK_BYTES), {
150
+ stream: true,
151
+ });
152
+ }
153
+ const bytes = Buffer.allocUnsafe(READ_CHUNK_BYTES);
154
+ while (true) {
155
+ signal?.throwIfAborted();
156
+ const read = await handle.read(bytes, 0, bytes.length, null);
157
+ signal?.throwIfAborted();
158
+ if (read.bytesRead === 0)
159
+ break;
160
+ yield decoder.decode(bytes.subarray(0, read.bytesRead), { stream: true });
161
+ }
162
+ yield decoder.decode();
163
+ }
164
+ const readPrefix = async (handle, size, signal) => {
165
+ const bytes = Buffer.allocUnsafe(size);
166
+ let offset = 0;
167
+ while (offset < bytes.length) {
168
+ signal?.throwIfAborted();
169
+ const read = await handle.read(bytes, offset, bytes.length - offset, null);
170
+ signal?.throwIfAborted();
171
+ if (read.bytesRead === 0)
172
+ return { bytes: bytes.subarray(0, offset), complete: true };
173
+ offset += read.bytesRead;
174
+ }
175
+ // The file grew after admission. Continue from this same handle, preserving
176
+ // the prefix already read rather than reopening or dropping its bytes.
177
+ return { bytes, complete: false };
178
+ };
179
+ const invalidJson = (operation, message, cause) => new AnalysisInputError(operation, cause === undefined ? undefined : { cause }, [{ path: [], reason: "invalid_format", expected: "JSON", message }]);