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
@@ -0,0 +1,238 @@
1
+ import { AnalysisInputError, } from "../analysisErrorCore.js";
2
+ import { uniqueSorted } from "../canonicalOrdering.js";
3
+ import { jsonObjectSchema } from "../jsonValue.js";
4
+ import { err, ok } from "../result.js";
5
+ import { completeWithinViewCoverage as completeCoverage, pageViewCoverage as pageCoverage, } from "./analysisViewCoverage.js";
6
+ const OPERATION = "inspect_analysis_view";
7
+ const inputError = (issues) => new AnalysisInputError(OPERATION, undefined, issues);
8
+ const jsIncompatible = (detail) => inputError([
9
+ {
10
+ path: ["view"],
11
+ reason: "invalid_value",
12
+ message: detail,
13
+ },
14
+ ]);
15
+ /** Exact module path or original source-map reference, when available. */
16
+ export const javascriptModulePath = (node) => {
17
+ if (node.identity.strategy === "canonical-path")
18
+ return node.identity.path;
19
+ if (node.identity.strategy === "source-map-original")
20
+ return node.identity.original_source;
21
+ for (const observation of node.observations) {
22
+ const path = observation.properties.path;
23
+ if (typeof path === "string")
24
+ return path;
25
+ const location = observation.evidence.location;
26
+ if (location.available && location.value.kind === "artifact-path")
27
+ return location.value.path;
28
+ if (location.available && location.value.kind === "source-range")
29
+ return location.value.source;
30
+ }
31
+ return null;
32
+ };
33
+ const moduleEntries = (nodes) => nodes
34
+ .filter((node) => node.kind === "javascript-asset" ||
35
+ node.kind === "javascript-module" ||
36
+ node.kind === "source-module")
37
+ .map((node) => ({ node, path: javascriptModulePath(node) }));
38
+ const exportNames = (node) => {
39
+ const names = new Set();
40
+ for (const observation of node.observations) {
41
+ const value = observation.properties.export_names ?? observation.properties.exports;
42
+ if (!Array.isArray(value))
43
+ continue;
44
+ for (const entry of value)
45
+ if (typeof entry === "string")
46
+ names.add(entry);
47
+ }
48
+ return [...names];
49
+ };
50
+ const nodeHashes = (node) => {
51
+ const hashes = new Set();
52
+ const { identity } = node;
53
+ if (identity.strategy === "content-digest")
54
+ hashes.add(identity.sha256);
55
+ if (identity.strategy === "canonical-path")
56
+ hashes.add(identity.artifact_sha256);
57
+ if (identity.strategy === "source-map-original") {
58
+ hashes.add(identity.source_map_sha256);
59
+ if (identity.source_sha256 !== null)
60
+ hashes.add(identity.source_sha256);
61
+ }
62
+ for (const observation of node.observations) {
63
+ for (const key of [
64
+ "sha256",
65
+ "container_sha256",
66
+ "entry_sha256",
67
+ "source_sha256",
68
+ ]) {
69
+ const value = observation.properties[key];
70
+ if (typeof value === "string" && /^[a-f0-9]{64}$/u.test(value))
71
+ hashes.add(value);
72
+ }
73
+ }
74
+ return [...hashes];
75
+ };
76
+ const sourceRanges = (node) => node.observations.flatMap((observation) => {
77
+ const location = observation.evidence.location;
78
+ return location.available && location.value.kind === "source-range"
79
+ ? [location.value]
80
+ : [];
81
+ });
82
+ const moduleItem = (node) => ({
83
+ node_id: node.node_id,
84
+ kind: node.kind,
85
+ path: javascriptModulePath(node),
86
+ identity: node.identity,
87
+ hashes: [...nodeHashes(node)],
88
+ exports: [...exportNames(node)],
89
+ source_ranges: [...sourceRanges(node)],
90
+ observations: node.observations.map((observation) => ({
91
+ observation_id: observation.observation_id,
92
+ label: observation.label,
93
+ properties: observation.properties,
94
+ evidence: {
95
+ ...observation.evidence,
96
+ location: observation.evidence.location,
97
+ },
98
+ })),
99
+ });
100
+ const applicationUnknownCount = (analysis) => analysis.graph.nodes.reduce((count, node) => count + Number(node.kind === "unknown"), 0);
101
+ const javascriptUnknowns = (analysis) => {
102
+ const unknowns = [
103
+ ...analysis.limitations,
104
+ ...analysis.graph.limitations,
105
+ ...analysis.semantic_graph.limitations,
106
+ ];
107
+ if (analysis.graph.coverage.status !== "complete")
108
+ unknowns.push(`graph.coverage.status is ${analysis.graph.coverage.status}`);
109
+ if (analysis.semantic_graph.coverage.status !== "complete")
110
+ unknowns.push(`semantic_graph.coverage.status is ${analysis.semantic_graph.coverage.status}`);
111
+ if (applicationUnknownCount(analysis) > 0)
112
+ unknowns.push(`${String(applicationUnknownCount(analysis))} application graph unknowns remain in the parent Evidence.`);
113
+ if (analysis.semantic_graph.unknowns.length > 0)
114
+ unknowns.push(`${String(analysis.semantic_graph.unknowns.length)} semantic graph unknowns remain in the parent Evidence.`);
115
+ return unknowns;
116
+ };
117
+ const parentFields = (parent, analysis) => ({
118
+ parent_evidence_id: parent.evidenceId,
119
+ parent_operation: "analyze_javascript_application",
120
+ parent_digest: parent.evidenceId.slice(3),
121
+ artifact: {
122
+ path: analysis.input_path,
123
+ sha256: analysis.root_artifact_sha256,
124
+ },
125
+ limitations: uniqueSorted([
126
+ ...parent.limitations,
127
+ ...analysis.limitations,
128
+ ...analysis.graph.limitations,
129
+ ...analysis.semantic_graph.limitations,
130
+ ]),
131
+ unknowns: uniqueSorted([...javascriptUnknowns(analysis)]),
132
+ });
133
+ const selectModule = (modules, selector) => {
134
+ if ("node_id" in selector) {
135
+ const matches = modules.filter(({ node }) => node.node_id === selector.node_id);
136
+ if (matches.length === 1) {
137
+ const selected = matches[0];
138
+ if (selected !== undefined)
139
+ return ok(selected.node);
140
+ }
141
+ return err(inputError([
142
+ {
143
+ path: ["view", "selector", "node_id"],
144
+ reason: "invalid_value",
145
+ message: `No module has node_id ${JSON.stringify(selector.node_id)}. Page the modules collection to inspect available identities.`,
146
+ },
147
+ ]));
148
+ }
149
+ if ("path" in selector) {
150
+ const matches = modules.filter((entry) => entry.path === selector.path);
151
+ if (matches.length === 1) {
152
+ const selected = matches[0];
153
+ if (selected !== undefined)
154
+ return ok(selected.node);
155
+ }
156
+ if (matches.length === 0)
157
+ return err(inputError([
158
+ {
159
+ path: ["view", "selector", "path"],
160
+ reason: "invalid_value",
161
+ message: `No module has path ${JSON.stringify(selector.path)}. Page the modules collection to inspect exact paths and node_id values.`,
162
+ },
163
+ ]));
164
+ return err(inputError([
165
+ {
166
+ path: ["view", "selector", "path"],
167
+ reason: "invalid_value",
168
+ message: `Multiple modules have path ${JSON.stringify(selector.path)}; select one by node_id.`,
169
+ expected: matches.map((entry) => ({ node_id: entry.node.node_id })),
170
+ },
171
+ ]));
172
+ }
173
+ return err(jsIncompatible("Module items are selected by exact path or node_id."));
174
+ };
175
+ /** Project one JavaScript application view without re-running reconstruction. */
176
+ export const projectJavaScriptApplicationView = (parent, analysis, view) => {
177
+ const shared = parentFields(parent, analysis);
178
+ const modules = moduleEntries(analysis.graph.nodes);
179
+ if (view.kind === "summary")
180
+ return ok({
181
+ kind: "summary",
182
+ view,
183
+ summary: {
184
+ input_path: analysis.input_path,
185
+ format: analysis.format,
186
+ root_artifact_sha256: analysis.root_artifact_sha256,
187
+ statistics: jsonObjectSchema.parse(analysis.statistics),
188
+ electron: jsonObjectSchema.parse(analysis.summary),
189
+ coverage: jsonObjectSchema.parse({
190
+ application: analysis.graph.coverage,
191
+ semantic: {
192
+ ...analysis.semantic_graph.coverage,
193
+ families: analysis.semantic_graph.coverage.families.map(({ unknown_ids, ...family }) => ({
194
+ ...family,
195
+ unknown_count: unknown_ids.length,
196
+ })),
197
+ },
198
+ application_unknowns: applicationUnknownCount(analysis),
199
+ semantic_unknowns: analysis.semantic_graph.unknowns.length,
200
+ }),
201
+ limitation_count: analysis.limitations.length,
202
+ },
203
+ coverage: completeCoverage(modules.length, analysis.graph.nodes.length),
204
+ ...shared,
205
+ });
206
+ if (view.kind === "facet")
207
+ return err(jsIncompatible("facet views apply to inspect_binary_layout Evidence (mitigations or linkage)."));
208
+ if (view.kind === "item") {
209
+ if (view.collection !== "modules")
210
+ return err(jsIncompatible("Section and symbol collections apply to inspect_binary_layout Evidence."));
211
+ const selected = selectModule(modules, view.selector);
212
+ if (!selected.ok)
213
+ return selected;
214
+ return ok({
215
+ kind: "item",
216
+ view,
217
+ item: moduleItem(selected.value),
218
+ coverage: completeCoverage(1, modules.length),
219
+ ...shared,
220
+ });
221
+ }
222
+ if (view.collection !== "modules")
223
+ return err(jsIncompatible("Section and symbol collections apply to inspect_binary_layout Evidence."));
224
+ const items = modules
225
+ .slice(view.offset, view.offset + view.limit)
226
+ .map(({ node, path }) => ({
227
+ node_id: node.node_id,
228
+ kind: node.kind,
229
+ path,
230
+ }));
231
+ return ok({
232
+ kind: "page",
233
+ view,
234
+ items,
235
+ coverage: pageCoverage(view.offset, items.length, modules.length),
236
+ ...shared,
237
+ });
238
+ };
@@ -1,9 +1,7 @@
1
1
  import { z } from "zod";
2
+ import { localPathStringSchema } from "../localPath.js";
2
3
  const target = {
3
- path: z
4
- .string()
5
- .min(1)
6
- .describe("Local APK path; the target is never executed"),
4
+ path: localPathStringSchema.describe("Local APK path; the target is never executed"),
7
5
  };
8
6
  const classTarget = {
9
7
  ...target,
@@ -5,6 +5,7 @@ import { parseArtifactInventoryEvidence } from "../artifactInventoryEvidence.js"
5
5
  import { evidenceSchema } from "../evidence.js";
6
6
  import { digestSchema } from "../digests.js";
7
7
  import { prefixedDigestSchema } from "../digests.js";
8
+ import { bridgeCandidateCoverageSchema, projectCartesianCandidates, } from "../bridgeCandidateProjection.js";
8
9
  const evidenceIdSchema = prefixedDigestSchema("ev");
9
10
  const pathSchema = z.string().min(1);
10
11
  const componentSchema = z.strictObject({
@@ -52,6 +53,7 @@ export const androidApplicationProjectionResultSchema = z.strictObject({
52
53
  "unity-convention",
53
54
  ]),
54
55
  })),
56
+ bridge_candidate_coverage: bridgeCandidateCoverageSchema,
55
57
  coverage: z.strictObject({
56
58
  status: z.enum(["complete-within-inventory", "partial"]),
57
59
  inventory_complete: z.boolean(),
@@ -75,7 +77,7 @@ export const projectAndroidApplication = (input) => {
75
77
  path: occurrence.logical_path,
76
78
  artifact_id: node.artifact_id,
77
79
  sha256: node.sha256,
78
- format: node.format,
80
+ format: occurrence.artifact_format,
79
81
  };
80
82
  });
81
83
  const classified = classify(all);
@@ -88,6 +90,11 @@ export const projectAndroidApplication = (input) => {
88
90
  "Manifest, resource, signing, and bytecode semantics require a dedicated Android provider; this projection reports exact inventory paths and hashes only.",
89
91
  "Runtime families are inferred from inventory formats and paths; filename suffixes do not establish valid DEX or JVM class bytes.",
90
92
  "Bridge candidates are path-based hypotheses, not decoded JNI declarations or observed runtime calls.",
93
+ ...(bridgeProjection.coverage.status === "partial"
94
+ ? [
95
+ `Bridge candidate pairs exceeded the projection safety budget; ${bridgeProjection.coverage.omitted_candidates} hypotheses are omitted. Component arrays still include every component from the supplied inventory pages.`,
96
+ ]
97
+ : []),
91
98
  ];
92
99
  const withoutId = {
93
100
  root_sha256: inventory.manifest.root_sha256,
@@ -98,8 +105,9 @@ export const projectAndroidApplication = (input) => {
98
105
  components,
99
106
  runtime_families: runtimeFamilies(all),
100
107
  bridge_candidates: bridgeProjection.candidates,
108
+ bridge_candidate_coverage: bridgeProjection.coverage,
101
109
  coverage: {
102
- status: inventory.complete
110
+ status: inventory.complete && bridgeProjection.coverage.status === "complete"
103
111
  ? "complete-within-inventory"
104
112
  : "partial",
105
113
  inventory_complete: inventory.complete,
@@ -141,14 +149,14 @@ const runtimeFamilies = (all) => {
141
149
  return [...families].sort(compare);
142
150
  };
143
151
  const bridgeCandidates = (managed, native) => {
144
- const candidates = managed.flatMap((source) => native.map((target) => ({
145
- managed_path: source.path,
146
- native_path: target.path,
147
- basis: bridgeBasis(target.path),
148
- })));
149
- return {
150
- candidates,
151
- };
152
+ return projectCartesianCandidates({
153
+ groups: [{ left: managed, right: native }],
154
+ createCandidate: (managed_path, target) => ({
155
+ managed_path,
156
+ native_path: target.path,
157
+ basis: bridgeBasis(target.path),
158
+ }),
159
+ });
152
160
  };
153
161
  const bridgeBasis = (path) => {
154
162
  const lower = path.toLowerCase();
@@ -6,6 +6,7 @@ import { parseArtifactInventoryEvidence } from "../artifactInventoryEvidence.js"
6
6
  import { evidenceSchema } from "../evidence.js";
7
7
  import { digestSchema } from "../digests.js";
8
8
  import { prefixedDigestSchema } from "../digests.js";
9
+ import { bridgeCandidateCoverageSchema, projectCartesianCandidates, } from "../bridgeCandidateProjection.js";
9
10
  const evidenceIdSchema = prefixedDigestSchema("ev");
10
11
  const pathSchema = z.string().min(1);
11
12
  const APPLE_ROOT_FORMATS = ["ipa", "directory", "zip", "dmg"];
@@ -52,6 +53,7 @@ export const appleApplicationProjectionResultSchema = z.strictObject({
52
53
  "unity-convention",
53
54
  ]),
54
55
  })),
56
+ bridge_candidate_coverage: bridgeCandidateCoverageSchema,
55
57
  coverage: z.strictObject({
56
58
  status: z.enum(["complete-within-inventory", "partial"]),
57
59
  inventory_complete: z.boolean(),
@@ -83,7 +85,7 @@ export const projectAppleApplication = (input) => {
83
85
  path: occurrence.logical_path,
84
86
  artifact_id: node.artifact_id,
85
87
  sha256: node.sha256,
86
- format: node.format,
88
+ format: occurrence.artifact_format,
87
89
  },
88
90
  };
89
91
  });
@@ -110,6 +112,7 @@ export const projectAppleApplication = (input) => {
110
112
  sidecars: entries.some(({ path }) => isSidecar(path)),
111
113
  symlinks: entries.some(({ kind }) => kind === "symlink"),
112
114
  unattributed,
115
+ bridgeCandidateCoverage: bridgeProjection.coverage,
113
116
  });
114
117
  const withoutId = {
115
118
  root_sha256: inventory.manifest.root_sha256,
@@ -127,8 +130,9 @@ export const projectAppleApplication = (input) => {
127
130
  .sort(compare),
128
131
  runtime_families: runtimeFamilies,
129
132
  bridge_candidates: bridgeProjection.candidates,
133
+ bridge_candidate_coverage: bridgeProjection.coverage,
130
134
  coverage: {
131
- status: complete
135
+ status: complete && bridgeProjection.coverage.status === "complete"
132
136
  ? "complete-within-inventory"
133
137
  : "partial",
134
138
  inventory_complete: inventory.complete,
@@ -137,9 +141,11 @@ export const projectAppleApplication = (input) => {
137
141
  };
138
142
  return appleApplicationProjectionResultSchema.parse({
139
143
  ...withoutId,
140
- projection_id: `aap_${digest(withoutId)}`,
144
+ projection_id: appleProjectionId(withoutId),
141
145
  });
142
146
  };
147
+ /** Identify the complete projection, including source Evidence provenance. */
148
+ export const appleProjectionId = (projection) => `aap_${digest(projection)}`;
143
149
  /**
144
150
  * IPA projection keeps every archive component, as before. Directory, ZIP,
145
151
  * and DMG inventories can hold installers and other siblings, so only
@@ -204,21 +210,37 @@ const identifyRuntimeFamilies = (all) => {
204
210
  families.add("unity");
205
211
  return [...families].sort(compare);
206
212
  };
207
- /** Pair scripts and native code only within the same application root. */
213
+ /** Pair scripts and native code within matching application-root groups. */
208
214
  const identifyBridgeCandidates = (scripts, native, roots) => {
209
215
  const owner = (path) => roots.find((root) => isWithin(path, root)) ?? null;
210
- return {
211
- candidates: scripts.flatMap((script) => {
212
- const root = owner(script.path);
213
- return native
214
- .filter(({ path }) => owner(path) === root)
215
- .map((item) => ({
216
- source_path: script.path,
217
- native_path: item.path,
218
- basis: bridgeBasis(item.path),
219
- }));
216
+ const scriptGroups = [];
217
+ for (const script of scripts) {
218
+ const root = owner(script.path);
219
+ const last = scriptGroups.at(-1);
220
+ if (last?.root === root)
221
+ last.left.push(script);
222
+ else
223
+ scriptGroups.push({ root, left: [script] });
224
+ }
225
+ const nativeByRoot = new Map();
226
+ for (const item of native) {
227
+ const root = owner(item.path);
228
+ const scoped = nativeByRoot.get(root) ?? [];
229
+ scoped.push(item);
230
+ nativeByRoot.set(root, scoped);
231
+ }
232
+ const groups = scriptGroups.map(({ root, left }) => ({
233
+ left,
234
+ right: nativeByRoot.get(root) ?? [],
235
+ }));
236
+ return projectCartesianCandidates({
237
+ groups,
238
+ createCandidate: (source_path, item) => ({
239
+ source_path,
240
+ native_path: item.path,
241
+ basis: bridgeBasis(item.path),
220
242
  }),
221
- };
243
+ });
222
244
  };
223
245
  const bridgeBasis = (path) => {
224
246
  const lower = path.toLowerCase();
@@ -264,6 +286,11 @@ const projectionLimitations = (facts) => [
264
286
  "AppleDouble sidecar entries (._* files and __MACOSX/) describe neighbouring files and are excluded from bundle roles.",
265
287
  ]
266
288
  : []),
289
+ ...(facts.bridgeCandidateCoverage.status === "partial"
290
+ ? [
291
+ `Bridge candidate pairs exceeded the projection safety budget; ${facts.bridgeCandidateCoverage.omitted_candidates} hypotheses are omitted. Component arrays still include every component from the supplied inventory pages.`,
292
+ ]
293
+ : []),
267
294
  "Bundle roles follow path conventions. Read each info_plist_path with inspect_plist for CFBundleExecutable, identifiers, and declared services.",
268
295
  "Bundle identifiers and signing claims require dedicated plist and CMS parsing; this projection reports only exact paths and hashes.",
269
296
  "Bridge candidates are path-based hypotheses, not observed runtime calls.",
@@ -0,0 +1,73 @@
1
+ /** Retain recognized image-selection settings separately from diagnostic observations. */
2
+ export const embeddedDyldOverrides = (environment, platforms) => {
3
+ const overrides = [];
4
+ for (const setting of environment) {
5
+ const delimiter = setting.indexOf("=");
6
+ if (delimiter <= 0)
7
+ continue;
8
+ const variable = setting.slice(0, delimiter);
9
+ const value = setting.slice(delimiter + 1);
10
+ const effect = overrideEffect(variable, value);
11
+ if (effect === undefined)
12
+ continue;
13
+ // ROOT_PATH is accepted only for simulator processes. Missing or unknown
14
+ // platform metadata cannot establish that dyld ignores it.
15
+ if (variable === "DYLD_ROOT_PATH" &&
16
+ platforms.length > 0 &&
17
+ platforms.every((platform) => platform >= 1 && platform <= 12) &&
18
+ !platforms.some((platform) => [7, 8, 9, 12].includes(platform)))
19
+ continue;
20
+ overrides.push({ variable, value, ...effect });
21
+ }
22
+ return overrides;
23
+ };
24
+ const overrideEffect = (variable, value) => {
25
+ switch (variable) {
26
+ // Empty directory components still produce /leaf candidates in dyld.
27
+ // In particular, an empty fallback value is not a no-op.
28
+ case "DYLD_LIBRARY_PATH":
29
+ return { phase: "override", scope: "library" };
30
+ case "DYLD_FRAMEWORK_PATH":
31
+ return { phase: "override", scope: "framework" };
32
+ case "DYLD_FALLBACK_LIBRARY_PATH":
33
+ return { phase: "fallback", scope: "library" };
34
+ case "DYLD_FALLBACK_FRAMEWORK_PATH":
35
+ return { phase: "fallback", scope: "framework" };
36
+ // Versioned paths map discovered images to their reported install names,
37
+ // so the directory's kind does not establish the replaced image's kind.
38
+ case "DYLD_VERSIONED_LIBRARY_PATH":
39
+ case "DYLD_VERSIONED_FRAMEWORK_PATH":
40
+ case "DYLD_IMAGE_SUFFIX":
41
+ // Versioned paths scan directories; suffixes create path variants.
42
+ // Empty directories cannot be scanned and empty suffixes repeat a path.
43
+ return /[^:]/u.test(value)
44
+ ? { phase: "override", scope: "all" }
45
+ : undefined;
46
+ case "DYLD_INSERT_LIBRARIES":
47
+ return value === "" ? undefined : { phase: "override", scope: "all" };
48
+ case "DYLD_ROOT_PATH":
49
+ case "DYLD_OVERLAY_PATH":
50
+ return value === "" ? undefined : { phase: "override", scope: "prefix" };
51
+ default:
52
+ return undefined;
53
+ }
54
+ };
55
+ const isFrameworkInstallName = (name, overrides) => {
56
+ const separator = name.lastIndexOf(".framework/");
57
+ if (separator < 0)
58
+ return false;
59
+ const framework = name.slice(0, separator).split("/").at(-1);
60
+ const leaf = name.slice(name.lastIndexOf("/") + 1);
61
+ return (leaf === framework ||
62
+ overrides.some(({ variable, value }) => variable === "DYLD_IMAGE_SUFFIX" && leaf === `${framework}${value}`));
63
+ };
64
+ /** Select only settings that can affect this dependency at its reached search phase. */
65
+ export const hasApplicableDyldOverrides = (overrides, installName, ordinarySearchFoundImage) => {
66
+ const kind = isFrameworkInstallName(installName, overrides)
67
+ ? "framework"
68
+ : "library";
69
+ return overrides.some(({ phase, scope }) => (phase === "override" || !ordinarySearchFoundImage) &&
70
+ (scope === "all" ||
71
+ scope === kind ||
72
+ (scope === "prefix" && !installName.startsWith("@"))));
73
+ };