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
@@ -39,6 +39,34 @@ const segmentSchema = z.object({
39
39
  const unavailableAnalysisFactSchema = z
40
40
  .object({ available: z.literal(false), reason: z.string() })
41
41
  .strict();
42
+ /** Typed string evidence shared by inventories and referenced function literals. */
43
+ export const analysisStringSchema = z.object({
44
+ address: z.string(),
45
+ value: z.string(),
46
+ provider_value: z
47
+ .string()
48
+ .exactOptional()
49
+ .describe("Original provider display text, which may shorten the typed object."),
50
+ decoding: unavailableAnalysisFactSchema
51
+ .exactOptional()
52
+ .describe("When present, value retains native display text because typed bytes could not be decoded."),
53
+ string: z
54
+ .object({
55
+ encoding: z.string().min(1),
56
+ encoding_status: z
57
+ .enum(["observed", "inferred"])
58
+ .exactOptional()
59
+ .describe("Whether the provider declares the encoding or REA infers it from the typed bytes and native display. This does not establish the original source's intended encoding."),
60
+ termination: z.enum(["missing", "present_or_not_required"]),
61
+ byte_length: z.number().int().min(0),
62
+ })
63
+ .exactOptional(),
64
+ });
65
+ /** An analyzed bookmark retains a missing provider label as null. */
66
+ export const analysisBookmarkSchema = z.strictObject({
67
+ address: z.string(),
68
+ name: z.string().nullable(),
69
+ });
42
70
  /** Complete observed function-body ranges; every range endpoint is inclusive. */
43
71
  export const functionBodySchema = z.discriminatedUnion("available", [
44
72
  unavailableAnalysisFactSchema,
@@ -163,6 +191,13 @@ export const localVariableSchema = z
163
191
  .object({
164
192
  description: z.string(),
165
193
  provenance: z.string().min(1),
194
+ name: z.string().nullable().exactOptional(),
195
+ stack_displacement: z
196
+ .string()
197
+ .regex(/^-?\d+$/u)
198
+ .nullable()
199
+ .exactOptional()
200
+ .describe("Observed signed stack byte displacement, encoded as decimal to preserve precision."),
166
201
  })
167
202
  .strict();
168
203
  /** Provider-neutral complete raw-instruction list for one analyzed function. */
@@ -197,13 +232,26 @@ export const referenceKindSchema = z.discriminatedUnion("available", [
197
232
  unavailableAnalysisFactSchema,
198
233
  availableReferenceKindSchema,
199
234
  ]);
200
- const referenceEdgeSchema = z
235
+ /** Reported call sites without resolved targets; unreported dispatch stays unknown. */
236
+ export const unresolvedCallSchema = z.strictObject({
237
+ address: z.string(),
238
+ reason: z.string(),
239
+ });
240
+ /** Observed endpoints with complete or partial reference classification evidence. */
241
+ export const referenceEdgeSchema = z
201
242
  .object({
202
243
  source_address: z.string(),
203
244
  target_address: z.string(),
204
245
  source_procedure: procedureIdentitySchema.nullable(),
205
246
  target_procedure: procedureIdentitySchema.nullable(),
206
247
  kind: referenceKindSchema,
248
+ call: z
249
+ .strictObject({
250
+ classification: z.enum(["none", "unknown", "direct", "objective_c"]),
251
+ provider_type: z.number().int(),
252
+ provenance: z.string().min(1),
253
+ })
254
+ .exactOptional(),
207
255
  })
208
256
  .strict();
209
257
  export const functionDossierSchema = z
@@ -225,13 +273,8 @@ export const functionDossierSchema = z
225
273
  callees: z.array(procedureIdentitySchema),
226
274
  incoming_references: z.array(referenceEdgeSchema),
227
275
  outgoing_references: z.array(referenceEdgeSchema),
228
- referenced_strings: z.array(z
229
- .object({
230
- address: z.string(),
231
- value: z.string(),
232
- source_address: z.string(),
233
- })
234
- .strict()),
276
+ unresolved_calls: z.array(unresolvedCallSchema).exactOptional(),
277
+ referenced_strings: z.array(analysisStringSchema.extend({ source_address: z.string() })),
235
278
  referenced_names: z.array(z
236
279
  .object({
237
280
  address: z.string(),
@@ -0,0 +1,114 @@
1
+ const immutableSnapshots = new WeakSet();
2
+ /** Recognize an owned JSON snapshot sealed by this module, or an immutable scalar. */
3
+ export const isImmutableJsonSnapshot = (value) => value === null ||
4
+ typeof value === "string" ||
5
+ typeof value === "boolean" ||
6
+ (typeof value === "number" && Number.isFinite(value)) ||
7
+ (typeof value === "object" && immutableSnapshots.has(value));
8
+ /** Seal an already parsed, owned JSON snapshot for immutable zero-copy reuse. */
9
+ export const freezeJsonSnapshot = (value) => {
10
+ const pending = [{ value, exiting: false }];
11
+ // These sets exist only during traversal, while the owned root already
12
+ // retains every child. Strong sets avoid per-node ephemeron GC work.
13
+ const visited = new Set();
14
+ const ancestors = new Set();
15
+ const objects = [];
16
+ while (pending.length > 0) {
17
+ const entry = pending.pop();
18
+ if (entry === undefined)
19
+ break;
20
+ const item = entry.value;
21
+ if (entry.exiting && typeof item === "object" && item !== null) {
22
+ ancestors.delete(item);
23
+ visited.add(item);
24
+ objects.push(item);
25
+ continue;
26
+ }
27
+ if (isImmutableJsonSnapshot(item))
28
+ continue;
29
+ if (typeof item !== "object" || item === null)
30
+ throw new TypeError("Immutable JSON snapshots require JSON values");
31
+ if (ancestors.has(item))
32
+ throw new TypeError("Immutable JSON snapshots cannot contain circular references");
33
+ if (visited.has(item))
34
+ continue;
35
+ ancestors.add(item);
36
+ pending.push({ value: item, exiting: true });
37
+ pushSnapshotChildren(item, pending);
38
+ }
39
+ // Register only after every value is checked and every object is frozen.
40
+ // An arbitrary Object.freeze call cannot forge this snapshot identity.
41
+ for (const item of objects)
42
+ Object.freeze(item);
43
+ // Register the requested root, rather than retaining weak entries for every
44
+ // nested object. Sealing an Evidence or bundle skips previously sealed roots.
45
+ if (typeof value === "object" && value !== null)
46
+ immutableSnapshots.add(value);
47
+ return value;
48
+ };
49
+ /**
50
+ * Seal exclusively owned JSON in bounded steps, authenticating only completion.
51
+ * Abandonment or failure can leave the provisional input partly frozen.
52
+ */
53
+ export function* freezeOwnedJsonSnapshotSteps(value) {
54
+ const pending = [{ value, exiting: false }];
55
+ const visited = new Set();
56
+ const ancestors = new Set();
57
+ let examined = 0;
58
+ try {
59
+ while (pending.length > 0) {
60
+ if (examined++ === 4096) {
61
+ examined = 0;
62
+ yield;
63
+ }
64
+ const entry = pending.pop();
65
+ if (entry === undefined)
66
+ break;
67
+ const item = entry.value;
68
+ if (entry.exiting && typeof item === "object" && item !== null) {
69
+ ancestors.delete(item);
70
+ visited.add(item);
71
+ continue;
72
+ }
73
+ if (isImmutableJsonSnapshot(item))
74
+ continue;
75
+ if (typeof item !== "object" || item === null)
76
+ throw new TypeError("Immutable JSON snapshots require JSON values");
77
+ if (ancestors.has(item))
78
+ throw new TypeError("Immutable JSON snapshots cannot contain circular references");
79
+ if (visited.has(item))
80
+ continue;
81
+ ancestors.add(item);
82
+ pending.push({ value: item, exiting: true });
83
+ pushSnapshotChildren(item, pending);
84
+ // Lock every inspected edge before the scheduler can release control.
85
+ Object.freeze(item);
86
+ }
87
+ if (typeof value === "object" && value !== null)
88
+ immutableSnapshots.add(value);
89
+ return value;
90
+ }
91
+ finally {
92
+ pending.length = 0;
93
+ visited.clear();
94
+ ancestors.clear();
95
+ }
96
+ }
97
+ const pushSnapshotChildren = (item, pending) => {
98
+ const prototype = Object.getPrototypeOf(item);
99
+ if (!Array.isArray(item) &&
100
+ prototype !== Object.prototype &&
101
+ prototype !== null)
102
+ throw new TypeError("Immutable JSON snapshots require ordinary objects");
103
+ if (Array.isArray(item))
104
+ for (let index = 0; index < item.length; index += 1)
105
+ if (!Object.hasOwn(item, index))
106
+ throw new TypeError("Immutable JSON snapshots cannot contain sparse arrays");
107
+ for (const key of Object.getOwnPropertyNames(item)) {
108
+ const descriptor = Object.getOwnPropertyDescriptor(item, key);
109
+ if (descriptor === undefined || !Object.hasOwn(descriptor, "value"))
110
+ throw new TypeError("Immutable JSON snapshots cannot contain accessors");
111
+ const child = descriptor.value;
112
+ pending.push({ value: child, exiting: false });
113
+ }
114
+ };
@@ -1,3 +1,6 @@
1
+ import { AnalysisInputError, } from "./analysisErrorCore.js";
2
+ /** Build the standard application input error while retaining schema causes and extra semantic issues. */
3
+ export const analysisInputErrorFromIssues = (operation, issues, input, options = {}) => new AnalysisInputError(operation, options.cause === undefined ? undefined : { cause: options.cause }, [...projectInputIssues(issues, input), ...(options.additionalIssues ?? [])]);
1
4
  /** Project Zod failures to secret-safe caller correction metadata. */
2
5
  export const projectInputIssues = (issues, input) => issues.flatMap((issue) => projectIssue(issue, input));
3
6
  const projectIssue = (issue, input) => {
@@ -1,6 +1,6 @@
1
1
  import { z } from "zod";
2
- import { isAbsoluteLocalPath } from "../localPath.js";
3
- const pathInputSchema = z.string().trim().min(1).refine(isAbsoluteLocalPath, {
2
+ import { isAbsoluteLocalPath, localPathStringSchema } from "../localPath.js";
3
+ const pathInputSchema = localPathStringSchema.refine(isAbsoluteLocalPath, {
4
4
  message: "Electron executable, application, and root paths must be absolute local filesystem paths (for example /Applications/Electron.app/Contents/MacOS/Electron)",
5
5
  });
6
6
  const absolutePathSchema = z
@@ -60,60 +60,17 @@ export const electronActiveObservationInputSchema = z.strictObject({
60
60
  application_root: pathInputSchema
61
61
  .optional()
62
62
  .describe("Absolute local filesystem root for application-relative paths; omit to derive it from the application path. Relative paths are rejected."),
63
- args: z.array(z.string()).default([]),
64
- actions: z.array(actionSchema).default([]),
65
- });
66
- const ipcEventSchema = z.strictObject({
67
- sequence: z.number().int().min(1),
68
- correlation_id: z.string().nullable().default(null),
69
- kind: z.enum([
70
- "main-handler-invocation",
71
- "main-event-invocation",
72
- "utility-process-fork",
73
- "utility-process-message",
74
- "ipc-main-to-renderer",
75
- "ipc-utility-to-main",
76
- "ipc-renderer-send",
77
- "ipc-renderer-invoke",
78
- "ipc-renderer-post-message",
79
- ]),
80
- event: z.string().nullable().optional(),
81
- phase: z
82
- .enum(["attempted", "completed", "blocked", "failed", "observed"])
83
- .nullable()
84
- .optional(),
85
- channel: z.string().nullable(),
86
- direction: z
87
- .enum([
88
- "renderer-to-main",
89
- "main-to-renderer",
90
- "main-to-utility",
91
- "utility-to-main",
92
- ])
93
- .nullable()
94
- .optional(),
95
- sender: z.string().nullable().optional(),
96
- receiver: z.string().nullable().optional(),
97
- frame: z.string().nullable().default(null),
98
- target: z.string().nullable().optional(),
99
- argument_shapes: z.array(z.string()),
100
- result_shape: z.string().nullable(),
101
- process_type: z.string().nullable(),
102
- source: z.string().default("electron-active-hook"),
103
- capture_method: z
104
- .enum(["api-wrapper", "event-emitter", "process-hook"])
105
- .default("api-wrapper"),
106
- artifact_path: z.string().nullable().default(null),
107
- artifact_sha256: z
63
+ args: z
64
+ .array(z
108
65
  .string()
109
- .regex(/^[a-f0-9]{64}$/u)
110
- .nullable()
111
- .default(null),
112
- error: z.boolean(),
66
+ .regex(/^[^\u0000]*$/u, "Electron arguments must not contain NUL"))
67
+ .default([]),
68
+ actions: z.array(actionSchema).default([]),
113
69
  });
114
- const timelineEventSchema = z.strictObject({
70
+ /** Canonical active Electron event shared by the hook boundary and public timeline. */
71
+ export const electronActiveTimelineEventSchema = z.strictObject({
115
72
  sequence: z.number().int().min(1),
116
- correlation_id: z.string().nullable().default(null),
73
+ correlation_id: z.string().nullable(),
117
74
  kind: z.enum([
118
75
  "main-handler-invocation",
119
76
  "main-event-invocation",
@@ -166,6 +123,19 @@ const timelineEventSchema = z.strictObject({
166
123
  .nullable(),
167
124
  error: z.boolean(),
168
125
  });
126
+ const ipcEventSchema = electronActiveTimelineEventSchema.extend({
127
+ kind: z.enum([
128
+ "main-handler-invocation",
129
+ "main-event-invocation",
130
+ "utility-process-fork",
131
+ "utility-process-message",
132
+ "ipc-main-to-renderer",
133
+ "ipc-utility-to-main",
134
+ "ipc-renderer-send",
135
+ "ipc-renderer-invoke",
136
+ "ipc-renderer-post-message",
137
+ ]),
138
+ });
169
139
  const processMetricSchema = z.strictObject({
170
140
  pid: z.number().int().min(1),
171
141
  type: z.string().min(1),
@@ -235,19 +205,32 @@ export const electronActiveObservationResultSchema = z.strictObject({
235
205
  ipc: z.strictObject({
236
206
  events: z.array(ipcEventSchema),
237
207
  observed: z.number().int().min(0),
208
+ dropped: z.number().int().min(0),
238
209
  }),
239
- timeline: z
240
- .strictObject({
241
- events: z.array(timelineEventSchema),
210
+ timeline: z.strictObject({
211
+ events: z.array(electronActiveTimelineEventSchema),
242
212
  observed: z.number().int().min(0),
243
- })
244
- .default({ events: [], observed: 0 }),
245
- coverage: coverageSchema.default({
246
- status: "partial_attach",
247
- observed_event_families: [],
248
- unavailable_event_families: [],
249
- observed_roles: [],
250
- pre_capture_activity: "unavailable",
213
+ dropped: z.number().int().min(0),
214
+ }),
215
+ retention: z.strictObject({
216
+ budget_bytes: z.number().int().min(0),
217
+ estimated_retained_bytes: z.number().int().min(0),
218
+ event_serialized_byte_upper_bound: z.number().int().min(0),
219
+ retained: z.number().int().min(0),
220
+ dropped: z.number().int().min(0),
221
+ dropped_event_families: z.array(z.strictObject({
222
+ family: z.string().min(1),
223
+ count: z.number().int().min(1),
224
+ })),
225
+ dropped_event_roles: z.array(z.strictObject({
226
+ role: z.string().min(1),
227
+ count: z.number().int().min(1),
228
+ })),
229
+ observed_ipc: z.number().int().min(0),
230
+ dropped_ipc: z.number().int().min(0),
231
+ observed_runtime: z.number().int().min(0),
232
+ dropped_runtime: z.number().int().min(0),
251
233
  }),
234
+ coverage: coverageSchema,
252
235
  limitations: z.array(z.string()),
253
236
  });
@@ -80,9 +80,20 @@ export const electronPageInspectionSchema = z.object({
80
80
  script_key: prefixedDigestSchema("electron_script"),
81
81
  frame_id: z.string().nullable().default(null),
82
82
  file_path: z.string(),
83
- cdp_hash: z.string(),
84
- length: z.number().int().min(0),
85
- is_module: z.boolean(),
83
+ cdp_hash: z
84
+ .string()
85
+ .nullable()
86
+ .describe("Producer-reported script hash; null when unavailable."),
87
+ length: z
88
+ .number()
89
+ .int()
90
+ .min(0)
91
+ .nullable()
92
+ .describe("Producer-reported script length; null when unavailable."),
93
+ is_module: z
94
+ .boolean()
95
+ .nullable()
96
+ .describe("Producer-reported module classification; null when unavailable."),
86
97
  language: z.string().nullable(),
87
98
  source: electronSourceSchema,
88
99
  })),
@@ -54,10 +54,16 @@ const collectWindowOptions = (source, options) => {
54
54
  const collectWebPreferences = (source, object) => {
55
55
  const preferences = [];
56
56
  let unknown = 0;
57
- let preload = {
58
- preload_path: null,
59
- preload_resolution_context: null,
60
- };
57
+ const effectivePreload = objectProperty(object, "preload");
58
+ const preloadPath = effectivePreload.status === "explicit"
59
+ ? staticPath(effectivePreload.property.value)
60
+ : undefined;
61
+ const preload = effectivePreload.status === "explicit" && preloadPath !== undefined
62
+ ? {
63
+ preload_path: preloadPath,
64
+ preload_resolution_context: staticPathResolutionContext(effectivePreload.property.value),
65
+ }
66
+ : { preload_path: null, preload_resolution_context: null };
61
67
  for (const property of object.properties) {
62
68
  if (t.isSpreadElement(property)) {
63
69
  unknown += 1;
@@ -85,11 +91,6 @@ const collectWebPreferences = (source, object) => {
85
91
  continue;
86
92
  }
87
93
  const path = name === "preload" ? staticPath(property.value) : undefined;
88
- if (path !== undefined)
89
- preload = {
90
- preload_path: path,
91
- preload_resolution_context: staticPathResolutionContext(property.value),
92
- };
93
94
  const value = path === undefined
94
95
  ? electronStaticValue(source, property.value)
95
96
  : { status: "literal", value: path, expression: null };
@@ -1,7 +1,8 @@
1
1
  import * as t from "@babel/types";
2
2
  import { boundedExpression, electronStaticValue, handlerKind, } from "./electronStaticAnalysisValues.js";
3
3
  import { addLocatedFinding } from "./javascriptStaticAnalysisFindings.js";
4
- import { argumentNode, calleeName, range, semanticStaticPropertyName, } from "./javascriptStaticAnalysisHelpers.js";
4
+ import { argumentNode, calleeName, range, } from "./javascriptStaticAnalysisHelpers.js";
5
+ import { semanticStaticPropertyName } from "./javascriptAstValues.js";
5
6
  /** Inspect Electron IPC operations and validation candidates. */
6
7
  export const inspectElectronIpcNode = (node, context) => {
7
8
  if (t.isCallExpression(node)) {
@@ -2,7 +2,8 @@ import * as t from "@babel/types";
2
2
  import { compareCodePoints } from "../canonicalOrdering.js";
3
3
  import { stripQueryAndFragment } from "../artifactPathSyntax.js";
4
4
  import { addLocatedFinding } from "./javascriptStaticAnalysisFindings.js";
5
- import { argumentNode, calleeName, propertyName, range, semanticStaticPropertyName, stringValue, } from "./javascriptStaticAnalysisHelpers.js";
5
+ import { argumentNode, calleeName, range, stringValue, } from "./javascriptStaticAnalysisHelpers.js";
6
+ import { propertyName, semanticStaticPropertyName, } from "./javascriptAstValues.js";
6
7
  /** Inspect JavaScript-side imports and re-exports of native .node addons. */
7
8
  export const inspectElectronNativeNode = (node, context) => {
8
9
  if (t.isImportDeclaration(node))
@@ -1,6 +1,6 @@
1
1
  import * as t from "@babel/types";
2
2
  import { compareCodePoints } from "../canonicalOrdering.js";
3
- import { semanticStaticPropertyName } from "./javascriptAstValues.js";
3
+ import { readExactJavaScriptLiteral, semanticStaticPropertyName, } from "./javascriptAstValues.js";
4
4
  import { sourceSlice } from "./javascriptStaticAnalysisHelpers.js";
5
5
  /** Preserve one literal value or the exact inert expression. */
6
6
  export const electronStaticValue = (source, node) => {
@@ -101,17 +101,11 @@ const collectMembersAt = (object, prefix, depth, state) => {
101
101
  }
102
102
  };
103
103
  const literalValue = (node) => {
104
- if (t.isStringLiteral(node) || t.isNumericLiteral(node))
105
- return { found: true, value: node.value };
106
- if (t.isBooleanLiteral(node))
107
- return { found: true, value: node.value };
108
- if (t.isNullLiteral(node))
109
- return { found: true, value: null };
110
- if (t.isTemplateLiteral(node) && node.expressions.length === 0)
111
- return {
112
- found: true,
113
- value: node.quasis[0]?.value.cooked ?? node.quasis[0]?.value.raw ?? "",
114
- };
104
+ if (node === null || node === undefined)
105
+ return { found: false };
106
+ const literal = readExactJavaScriptLiteral(node);
107
+ if (literal.found)
108
+ return literal;
115
109
  if (t.isUnaryExpression(node, { operator: "-" }) &&
116
110
  t.isNumericLiteral(node.argument))
117
111
  return { found: true, value: -node.argument.value };
@@ -1,12 +1,13 @@
1
1
  import { z } from "zod";
2
- import { javascriptApplicationGraphSchema } from "./javascriptApplicationGraph.js";
3
- import { javaScriptSemanticGraphSchema } from "./javascriptSemanticGraph.js";
2
+ import { javascriptApplicationGraphSchema, isValidatedImmutableJavaScriptApplicationGraph, } from "./javascriptApplicationGraph.js";
3
+ import { javaScriptSemanticGraphSchema, isValidatedImmutableJavaScriptSemanticGraph, } from "./javascriptSemanticGraph.js";
4
4
  import { digestSchema } from "../digests.js";
5
5
  import { prefixedDigestSchema } from "../digests.js";
6
+ import { localPathStringSchema } from "../localPath.js";
6
7
  const countSchema = z.number().int().min(0);
7
8
  /** Public target-free request for static JavaScript application analysis. */
8
9
  export const analyzeJavaScriptApplicationInputSchema = z.strictObject({
9
- input_path: z.string().min(1),
10
+ input_path: localPathStringSchema,
10
11
  format: z.enum(["auto", "asar", "directory"]).default("auto"),
11
12
  });
12
13
  /** Compact counts for the high-level Electron architecture/security surface. */
@@ -45,9 +46,7 @@ const reconstructionStatisticsSchema = z.strictObject({
45
46
  parse_failures: countSchema,
46
47
  truncated_scopes: countSchema,
47
48
  });
48
- /** JavaScript application analysis with an authenticated semantic companion. */
49
- export const javascriptApplicationAnalysisResultSchema = z
50
- .strictObject({
49
+ const applicationAnalysisResultShape = z.strictObject({
51
50
  input_path: z.string().min(1),
52
51
  format: z.enum(["asar", "directory"]),
53
52
  root_artifact_sha256: digestSchema,
@@ -58,8 +57,8 @@ export const javascriptApplicationAnalysisResultSchema = z
58
57
  statistics: reconstructionStatisticsSchema,
59
58
  limitations: z.array(z.string().min(1)),
60
59
  semantic_graph: javaScriptSemanticGraphSchema,
61
- })
62
- .superRefine((result, context) => {
60
+ });
61
+ function* checkApplicationBindingsSteps(result, context) {
63
62
  if (result.semantic_graph.application_graph_id !== result.graph.graph_id)
64
63
  context.addIssue({
65
64
  code: "custom",
@@ -72,19 +71,68 @@ export const javascriptApplicationAnalysisResultSchema = z
72
71
  path: ["semantic_graph", "root_artifact_sha256"],
73
72
  message: "Semantic graph must commit the containing root artifact",
74
73
  });
75
- const applicationNodeIds = new Set(result.graph.nodes.map(({ node_id }) => node_id));
76
- for (const [nodeIndex, node] of result.semantic_graph.nodes.entries())
77
- for (const [identifierIndex, identifier,] of node.application_node_ids.entries())
78
- if (!applicationNodeIds.has(identifier))
79
- context.addIssue({
80
- code: "custom",
81
- path: [
82
- "semantic_graph",
83
- "nodes",
84
- nodeIndex,
85
- "application_node_ids",
86
- identifierIndex,
87
- ],
88
- message: "Semantic node references an absent application node",
89
- });
74
+ const applicationNodeIds = new Set();
75
+ let examined = 0;
76
+ try {
77
+ for (const node of result.graph.nodes) {
78
+ applicationNodeIds.add(node.node_id);
79
+ if (++examined === 4096) {
80
+ examined = 0;
81
+ yield;
82
+ }
83
+ }
84
+ for (const [nodeIndex, node] of result.semantic_graph.nodes.entries()) {
85
+ if (++examined === 4096) {
86
+ examined = 0;
87
+ yield;
88
+ }
89
+ for (const [identifierIndex, identifier,] of node.application_node_ids.entries()) {
90
+ if (!applicationNodeIds.has(identifier))
91
+ context.addIssue({
92
+ code: "custom",
93
+ path: [
94
+ "semantic_graph",
95
+ "nodes",
96
+ nodeIndex,
97
+ "application_node_ids",
98
+ identifierIndex,
99
+ ],
100
+ message: "Semantic node references an absent application node",
101
+ });
102
+ if (++examined === 4096) {
103
+ examined = 0;
104
+ yield;
105
+ }
106
+ }
107
+ }
108
+ }
109
+ finally {
110
+ applicationNodeIds.clear();
111
+ }
112
+ }
113
+ /** JavaScript application analysis with an authenticated semantic companion. */
114
+ export const javascriptApplicationAnalysisResultSchema = applicationAnalysisResultShape.superRefine((result, context) => {
115
+ const steps = checkApplicationBindingsSteps(result, context);
116
+ while (!steps.next().done) {
117
+ // Public/imported results still receive complete synchronous validation.
118
+ }
119
+ });
120
+ const ownedAnalysisResultShape = applicationAnalysisResultShape.extend({
121
+ graph: z.custom(isValidatedImmutableJavaScriptApplicationGraph),
122
+ semantic_graph: z.custom(isValidatedImmutableJavaScriptSemanticGraph),
90
123
  });
124
+ /** Reuse exact owned graphs while validating metadata and cross-graph bindings. */
125
+ export function* parseOwnedJavaScriptApplicationAnalysisSteps(input) {
126
+ const prepared = ownedAnalysisResultShape.safeParse(input);
127
+ if (!prepared.success)
128
+ return javascriptApplicationAnalysisResultSchema.parse(input);
129
+ const issues = [];
130
+ yield* checkApplicationBindingsSteps(prepared.data, {
131
+ addIssue: (issue) => {
132
+ issues.push(issue);
133
+ },
134
+ });
135
+ if (issues.length > 0)
136
+ throw new z.ZodError(issues);
137
+ return prepared.data;
138
+ }
@@ -347,6 +347,8 @@ export const applicationNodeIdentitySchema = z.discriminatedUnion("strategy", [
347
347
  source_map_sha256: digestSchema,
348
348
  // The exact `sources` entry; `""` is a legal relative reference.
349
349
  original_source: z.string(),
350
+ // Exact leaf-local root; null means omitted or explicitly null.
351
+ source_root: z.string().nullable(),
350
352
  source_sha256: digestSchema.nullable(),
351
353
  }),
352
354
  z.strictObject({