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
@@ -1,11 +1,28 @@
1
- import { createEvidence, } from "../../domain/evidence.js";
1
+ import { createImmutableEvidenceSteps, } from "../../domain/evidence.js";
2
2
  import { JAVASCRIPT_APPLICATION_PROVIDER } from "../InvestigationProviders.js";
3
- /** Create Evidence for one deterministic local JavaScript application graph. */
4
- export const createJavaScriptApplicationEvidence = (input, result) => createEvidence({
3
+ import { freezeOwnedJsonSnapshotSteps } from "../../domain/immutableJson.js";
4
+ import { rememberOwnedApplicationGraphEvidence } from "./JavaScriptApplicationEvidenceGraph.js";
5
+ import { completeJavaScriptAnalysisSteps } from "./JavaScriptAnalysisControl.js";
6
+ import { jsonValueValidationSteps } from "../../domain/jsonValue.js";
7
+ /** Create owned analysis Evidence while allowing request cancellation during sealing and hashing. */
8
+ export const createOwnedJavaScriptApplicationEvidenceCooperatively = async (input, result, signal, progress) => {
9
+ await reportEvidencePhase(progress, "seal_javascript_application_result", "Sealing the complete application analysis result");
10
+ const snapshot = await completeJavaScriptAnalysisSteps(freezeOwnedJsonSnapshotSteps(result), signal);
11
+ await reportEvidencePhase(progress, "validate_javascript_application_evidence", "Validating the immutable application Evidence JSON");
12
+ // The Evidence envelope consumes the completed immutable validation cache.
13
+ await completeJavaScriptAnalysisSteps(jsonValueValidationSteps(snapshot), signal);
14
+ await reportEvidencePhase(progress, "hash_javascript_application_evidence", "Hashing the complete application analysis Evidence");
15
+ const evidence = await completeJavaScriptAnalysisSteps(createImmutableEvidenceSteps(applicationSubject(snapshot), JAVASCRIPT_APPLICATION_PROVIDER, applicationObservation(input, snapshot)), signal);
16
+ return rememberOwnedApplicationGraphEvidence(evidence, snapshot);
17
+ };
18
+ const reportEvidencePhase = (progress, phase, message) => progress?.report({ phase, completed: 0, total: 1, message }) ??
19
+ Promise.resolve();
20
+ const applicationSubject = (result) => ({
5
21
  path: result.input_path,
6
22
  sha256: result.root_artifact_sha256,
7
23
  format: result.format,
8
- }, JAVASCRIPT_APPLICATION_PROVIDER, {
24
+ });
25
+ const applicationObservation = (input, result) => ({
9
26
  predicateType: "rea.javascript-application-analysis",
10
27
  operation: "analyze_javascript_application",
11
28
  parameters: parameters(input),
@@ -1,11 +1,25 @@
1
1
  import { JAVASCRIPT_APPLICATION_PROVIDER, JAVASCRIPT_RUNTIME_RECONCILIATION_PROVIDER, MANAGED_WORKFLOW_PROVIDER, } from "../InvestigationProviders.js";
2
- import { parseEvidence } from "../../domain/evidence.js";
2
+ import { isImmutableEvidence, parseEvidence, } from "../../domain/evidence.js";
3
3
  import { analyzeJavaScriptApplicationInputSchema, javascriptApplicationAnalysisResultSchema, } from "../../domain/javascript/javascriptApplicationAnalysis.js";
4
4
  import { javascriptRuntimeReconciliationResultSchema } from "../../domain/javascript/javascriptRuntimeReconciliationSchemas.js";
5
5
  import { managedApplicationGraphResultSchema } from "../../domain/managed/managedApplicationGraph.js";
6
+ const ownedApplicationSources = new WeakMap();
7
+ /** Retain the producer-validated meaning of its exact immutable result snapshot. */
8
+ export const rememberOwnedApplicationGraphEvidence = (evidence, result) => {
9
+ if (!isImmutableEvidence(evidence) ||
10
+ evidence.normalized_result !== result ||
11
+ evidence.operation !== "analyze_javascript_application" ||
12
+ !providerMatches(evidence, JAVASCRIPT_APPLICATION_PROVIDER))
13
+ throw new TypeError("Owned application Evidence must bind its exact validated immutable result");
14
+ ownedApplicationSources.set(evidence, Object.freeze(staticApplicationSourceForResult(evidence, result)));
15
+ return evidence;
16
+ };
6
17
  /** Parse and authenticate one REA-produced JavaScript Application Graph Evidence. */
7
18
  export const parseApplicationGraphEvidence = (input) => {
8
19
  const evidence = parseEvidence(input);
20
+ const owned = ownedApplicationSources.get(evidence);
21
+ if (owned !== undefined)
22
+ return owned;
9
23
  if (evidence.operation === "analyze_javascript_application" &&
10
24
  evidence.predicate_type === "rea.javascript-application-analysis" &&
11
25
  providerMatches(evidence, JAVASCRIPT_APPLICATION_PROVIDER))
@@ -21,10 +35,13 @@ export const parseApplicationGraphEvidence = (input) => {
21
35
  throw new TypeError("Application workflow requires authenticated analyze_javascript_application, reconcile_javascript_runtime, or project_managed_application_graph Evidence");
22
36
  };
23
37
  const staticApplicationSource = (evidence) => {
38
+ const result = javascriptApplicationAnalysisResultSchema.parse(evidence.normalized_result);
39
+ return staticApplicationSourceForResult(evidence, result);
40
+ };
41
+ const staticApplicationSourceForResult = (evidence, result) => {
24
42
  if (evidence.authority !== "shipped-artifact" ||
25
43
  evidence.confidence !== "derived")
26
44
  throw new TypeError("JavaScript application Evidence authority or confidence is invalid");
27
- const result = javascriptApplicationAnalysisResultSchema.parse(evidence.normalized_result);
28
45
  if (evidence.predicate_type !== "rea.javascript-application-analysis")
29
46
  throw new TypeError("JavaScript application Evidence predicate does not match its result shape");
30
47
  analyzeJavaScriptApplicationInputSchema.parse({
@@ -1,13 +1,14 @@
1
1
  import { z } from "zod";
2
2
  import { ArtifactReaderFailure } from "../../artifacts/ArtifactReader.js";
3
- import { analyzeJavaScriptApplicationInputSchema, javascriptApplicationAnalysisResultSchema, } from "../../domain/javascript/javascriptApplicationAnalysis.js";
4
- import { AnalysisInputError, AnalysisOutputError, } from "../../domain/analysisErrorCore.js";
3
+ import { analyzeJavaScriptApplicationInputSchema, parseOwnedJavaScriptApplicationAnalysisSteps, } from "../../domain/javascript/javascriptApplicationAnalysis.js";
4
+ import { AnalysisAccessDeniedError, AnalysisInputError, AnalysisOutputError, AnalysisUnsupportedTargetError, } from "../../domain/analysisErrorCore.js";
5
5
  import { ArtifactOperationError } from "../../domain/artifactOperationError.js";
6
6
  import {} from "../../domain/analysisErrorBase.js";
7
- import { projectInputIssues } from "../../domain/inputIssueProjection.js";
7
+ import { analysisInputErrorFromIssues } from "../../domain/inputIssueProjection.js";
8
8
  import { err, ok } from "../../domain/result.js";
9
9
  import { ProviderAdapterError } from "../../domain/providerAdapterError.js";
10
- import { createJavaScriptApplicationEvidence } from "./JavaScriptApplicationEvidence.js";
10
+ import { createOwnedJavaScriptApplicationEvidenceCooperatively } from "./JavaScriptApplicationEvidence.js";
11
+ import { assertJavaScriptAnalysisActive, checkpointJavaScriptAnalysis, completeJavaScriptAnalysisSteps, } from "./JavaScriptAnalysisControl.js";
11
12
  import { reconstructJavaScriptArtifact } from "./JavaScriptArtifactReconstruction.js";
12
13
  import { JAVASCRIPT_APPLICATION_PROVIDER } from "../InvestigationProviders.js";
13
14
  const OPERATION = "analyze_javascript_application";
@@ -15,18 +16,20 @@ const OPERATION = "analyze_javascript_application";
15
16
  export const analyzeJavaScriptApplication = async (rawInput, options = {}) => {
16
17
  const parsed = analyzeJavaScriptApplicationInputSchema.safeParse(rawInput);
17
18
  if (!parsed.success)
18
- return err(new AnalysisInputError(OPERATION, undefined, projectInputIssues(parsed.error.issues, rawInput)));
19
+ return err(analysisInputErrorFromIssues(OPERATION, parsed.error.issues, rawInput));
19
20
  return analyzeJavaScriptApplicationValidated(parsed.data, options);
20
21
  };
21
22
  /** Analyze input already parsed by a trusted adapter boundary. */
22
23
  export const analyzeJavaScriptApplicationValidated = async (input, options = {}) => {
23
- await options.progress?.report({
24
- phase: "analyze_javascript_application",
25
- completed: 0,
26
- total: 1,
27
- message: "Inventorying and parsing application artifacts",
28
- });
29
24
  try {
25
+ assertJavaScriptAnalysisActive(options.signal);
26
+ await options.progress?.report({
27
+ phase: "analyze_javascript_application",
28
+ completed: 0,
29
+ total: 1,
30
+ message: "Inventorying and parsing application artifacts",
31
+ });
32
+ await checkpointJavaScriptAnalysis(options.signal);
30
33
  const reconstructed = await reconstructJavaScriptArtifact({
31
34
  input_path: input.input_path,
32
35
  format: input.format,
@@ -36,20 +39,23 @@ export const analyzeJavaScriptApplicationValidated = async (input, options = {})
36
39
  phase: "validate_javascript_application_result",
37
40
  completed: 0,
38
41
  total: 1,
39
- message: "Validating the application analysis result",
42
+ message: "Validating result metadata and cross-graph bindings",
40
43
  });
41
- const result = javascriptApplicationAnalysisResultSchema.parse({
44
+ await checkpointJavaScriptAnalysis(options.signal);
45
+ const result = await completeJavaScriptAnalysisSteps(parseOwnedJavaScriptApplicationAnalysisSteps({
42
46
  ...application,
43
47
  summary,
44
48
  limitations: reconstructed.graph.limitations,
45
- });
49
+ }), options.signal);
46
50
  await options.progress?.report({
47
51
  phase: "create_javascript_application_evidence",
48
52
  completed: 0,
49
53
  total: 1,
50
54
  message: "Creating and hashing application analysis Evidence",
51
55
  });
52
- const evidence = createJavaScriptApplicationEvidence(input, result);
56
+ await checkpointJavaScriptAnalysis(options.signal);
57
+ const evidence = await createOwnedJavaScriptApplicationEvidenceCooperatively(input, result, options.signal, options.progress);
58
+ await checkpointJavaScriptAnalysis(options.signal);
53
59
  await options.progress?.report({
54
60
  phase: "analyze_javascript_application",
55
61
  completed: 1,
@@ -57,9 +63,15 @@ export const analyzeJavaScriptApplicationValidated = async (input, options = {})
57
63
  message: "Application graph and Electron boundaries reconstructed",
58
64
  terminal: true,
59
65
  });
66
+ assertJavaScriptAnalysisActive(options.signal);
60
67
  return ok(evidence);
61
68
  }
62
69
  catch (cause) {
70
+ // Input selection failures are already typed by their cause.
71
+ if (cause instanceof AnalysisInputError ||
72
+ cause instanceof AnalysisUnsupportedTargetError ||
73
+ cause instanceof AnalysisAccessDeniedError)
74
+ return err(cause);
63
75
  if (cause instanceof ArtifactReaderFailure)
64
76
  return err(new ArtifactOperationError(OPERATION, cause.reason, cause.details, cause.message));
65
77
  if (cause instanceof z.ZodError)
@@ -1,7 +1,7 @@
1
1
  import { z } from "zod";
2
2
  import { AnalysisInputError, AnalysisProtocolError, } from "../../domain/analysisErrorCore.js";
3
3
  import {} from "../../domain/analysisErrorBase.js";
4
- import { projectInputIssues } from "../../domain/inputIssueProjection.js";
4
+ import { analysisInputErrorFromIssues } from "../../domain/inputIssueProjection.js";
5
5
  import { compareJavaScriptApplicationVersions } from "../../domain/javascript/javascriptApplicationVersionComparison.js";
6
6
  import { compareApplicationVersionsInputSchema } from "../../domain/javascript/javascriptApplicationVersionComparisonSchemas.js";
7
7
  import { compareJavaScriptExportShapes } from "../../domain/javascript/javascriptExportShapeComparison.js";
@@ -18,7 +18,7 @@ export const traceApplicationFeatureEvidence = (rawInput) => {
18
18
  const operation = "trace_application_feature";
19
19
  const parsed = traceApplicationFeatureInputSchema.safeParse(rawInput);
20
20
  if (!parsed.success)
21
- return err(new AnalysisInputError(operation, undefined, projectInputIssues(parsed.error.issues, rawInput)));
21
+ return err(analysisInputErrorFromIssues(operation, parsed.error.issues, rawInput));
22
22
  return traceApplicationFeatureEvidenceValidated(parsed.data);
23
23
  };
24
24
  /** Derive one feature trace from input parsed by a trusted adapter. */
@@ -50,7 +50,7 @@ export const compareApplicationVersionsEvidence = (rawInput) => {
50
50
  const operation = "compare_application_versions";
51
51
  const parsed = compareApplicationVersionsInputSchema.safeParse(rawInput);
52
52
  if (!parsed.success)
53
- return err(new AnalysisInputError(operation, undefined, projectInputIssues(parsed.error.issues, rawInput)));
53
+ return err(analysisInputErrorFromIssues(operation, parsed.error.issues, rawInput));
54
54
  return compareApplicationVersionsEvidenceValidated(parsed.data);
55
55
  };
56
56
  /** Compare versions from input parsed by a trusted adapter. */
@@ -116,7 +116,7 @@ export const compareJavaScriptExportShapesEvidence = (rawInput) => {
116
116
  const operation = "compare_javascript_export_shapes";
117
117
  const parsed = compareJavaScriptExportShapesInputSchema.safeParse(rawInput);
118
118
  if (!parsed.success)
119
- return err(new AnalysisInputError(operation, undefined, projectInputIssues(parsed.error.issues, rawInput)));
119
+ return err(analysisInputErrorFromIssues(operation, parsed.error.issues, rawInput));
120
120
  return compareJavaScriptExportShapesEvidenceValidated(parsed.data);
121
121
  };
122
122
  /** Compare exact export shapes from input parsed by a trusted adapter. */
@@ -153,7 +153,7 @@ export const compareJavaScriptExportShapesEvidenceValidated = (input) => {
153
153
  }
154
154
  };
155
155
  const workflowFailure = (operation, cause, input) => cause instanceof z.ZodError
156
- ? err(new AnalysisInputError(operation, undefined, projectInputIssues(cause.issues, input)))
156
+ ? err(analysisInputErrorFromIssues(operation, cause.issues, input))
157
157
  : cause instanceof TypeError &&
158
158
  SAFE_APPLICATION_INPUT_CONSTRAINTS.has(cause.message)
159
159
  ? err(new AnalysisInputError(operation, undefined, [
@@ -1,7 +1,8 @@
1
1
  import { createHash } from "node:crypto";
2
2
  import { setImmediate } from "node:timers/promises";
3
+ import { resolveJavaScriptSourceMapReference } from "../../domain/javascript/javascriptSourceMapPaths.js";
3
4
  import { analyzeParsedJavaScriptStaticSource } from "../../domain/javascript/javascriptStaticAnalysis.js";
4
- import { analyzeParsedJavaScriptSemantics } from "../../domain/javascript/javascriptSemanticAnalysis.js";
5
+ import { analyzeParsedJavaScriptSemantics, classifyParsedJavaScriptOpenReceivers, } from "../../domain/javascript/javascriptSemanticAnalysis.js";
5
6
  import { parseJavaScriptSource } from "../../domain/javascript/javascriptSourceParser.js";
6
7
  import { hasValidSourceMapContents } from "../../domain/sourceMapContents.js";
7
8
  import { flattenSourceMapLeaves } from "../../domain/sourceMapEnvelope.js";
@@ -77,14 +78,15 @@ const analyzeArtifactFile = (file, context) => {
77
78
  state.files.push({ file, javascript: null, semantic: null });
78
79
  return;
79
80
  }
80
- const parsed = parseJavaScriptSource(file.text.value);
81
+ const parsed = parseJavaScriptSource(file.text.value, file.path);
81
82
  if (parsed === null) {
82
83
  const analysis = failedJavaScriptStaticAnalysis();
83
84
  state.files.push({ file, javascript: analysis, semantic: null });
84
85
  state.parseFailures += 1;
85
86
  return;
86
87
  }
87
- const analysis = analyzeParsedJavaScriptStaticSource(file.text.value, parsed);
88
+ const openReceiverFacts = classifyParsedJavaScriptOpenReceivers(parsed);
89
+ const analysis = analyzeParsedJavaScriptStaticSource(file.text.value, parsed, openReceiverFacts);
88
90
  const staticFindings = findingCount(analysis);
89
91
  const semantics = analysis.parse_status === "complete" || analysis.parse_status === "partial"
90
92
  ? analyzeParsedJavaScriptSemantics(parsed)
@@ -202,14 +204,16 @@ const collectSourceMapOriginals = (file, maps) => {
202
204
  const contents = map.sourcesContent;
203
205
  if (!hasValidSourceMapContents(names.length, contents))
204
206
  return invalidSourceMap(file, "Source map sourcesContent must contain one string or null entry per source.");
205
- const root = typeof map.sourceRoot === "string" ? map.sourceRoot : "";
207
+ if (map.sourceRoot != null && typeof map.sourceRoot !== "string")
208
+ return invalidSourceMap(file, "Source map sourceRoot must be a string or null.");
209
+ const root = typeof map.sourceRoot === "string" ? map.sourceRoot : null;
206
210
  for (const [index, raw] of names.entries()) {
207
211
  if (typeof raw !== "string")
208
212
  return invalidSourceMap(file, "Source map contains a non-string source name.");
209
213
  const rawContent = Array.isArray(contents) ? contents[index] : undefined;
210
214
  const content = typeof rawContent === "string" ? rawContent : null;
211
215
  sources.push({
212
- source: resolveSourceName(root, raw),
216
+ reference: resolveJavaScriptSourceMapReference(raw, root, file.path),
213
217
  content,
214
218
  content_sha256: content === null ? null : sha256(content),
215
219
  });
@@ -262,10 +266,9 @@ const rangeForOffsets = (text, start, end) => ({
262
266
  end: pointForOffset(text, end),
263
267
  });
264
268
  const pointForOffset = (text, offset) => {
265
- const lines = text.slice(0, offset).split("\n");
269
+ const lines = text.slice(0, offset).split(/\r\n|\r|\n/u);
266
270
  return { line: lines.length, column: lines.at(-1)?.length ?? 0 };
267
271
  };
268
- const resolveSourceName = (root, source) => `${root}${root !== "" && !root.endsWith("/") ? "/" : ""}${source}`;
269
272
  const optionalString = (value) => typeof value === "string" && value.length > 0 ? value : null;
270
273
  const sha256 = (value) => createHash("sha256").update(value).digest("hex");
271
274
  const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
@@ -1,14 +1,21 @@
1
- import { createJavaScriptApplicationGraph, } from "../../domain/javascript/javascriptApplicationGraph.js";
1
+ import { createJavaScriptApplicationGraph, createImmutableJavaScriptApplicationGraphSteps, } from "../../domain/javascript/javascriptApplicationGraph.js";
2
2
  import { JavaScriptArtifactGraphAccumulator } from "./JavaScriptArtifactGraphAccumulator.js";
3
+ import { selfReferenceOmissions, } from "./JavaScriptArtifactGraphContext.js";
3
4
  import { addJavaScriptHtmlRoles, addJavaScriptSourceMapOriginals, } from "./JavaScriptArtifactGraphDocuments.js";
4
5
  import { addJavaScriptStaticFindings } from "./JavaScriptArtifactGraphFindings.js";
5
6
  import { addJavaScriptModuleRelationships, addJavaScriptSourceModules, } from "./JavaScriptModuleRelationships.js";
6
7
  import { completeApplicationCoverage, partialApplicationCoverage, } from "../../domain/javascript/javascriptApplicationEvidenceSchemas.js";
7
- import { addJavaScriptArtifactContainers, addJavaScriptArtifactFiles, addJavaScriptBundlerNodes, addJavaScriptPackageNodes, createJavaScriptArtifactRootNode, } from "./JavaScriptArtifactGraphStructure.js";
8
+ import { semanticCoverageResourceLimits } from "../../domain/javascript/javascriptSemanticCoverage.js";
9
+ import { SEMANTIC_EXPRESSION_DEPTH_LIMIT, SEMANTIC_PRIMITIVE_CANDIDATE_LIMIT, SEMANTIC_PRIMITIVE_JSON_BYTES_LIMIT, semanticResourceLimitReason, } from "../../domain/javascript/javascriptSemanticResourceLimits.js";
10
+ import { addJavaScriptArtifactContainers, addJavaScriptArtifactFiles, addJavaScriptPackageNodes, createJavaScriptArtifactRootNode, } from "./JavaScriptArtifactGraphStructure.js";
11
+ import { addJavaScriptBundlerNodes } from "./JavaScriptArtifactGraphBundlers.js";
8
12
  import { addElectronBoundaries } from "./ElectronBoundaryGraph.js";
9
13
  import { classifyElectronIpcPairings, collectElectronIpcRecords, } from "./ElectronBoundaryAnalysis.js";
10
14
  /** Project artifact and AST facts into JavaScript Application Graph. */
11
- export const buildJavaScriptArtifactGraph = (snapshot, fileSet, analysis) => {
15
+ export const buildJavaScriptArtifactGraph = (snapshot, fileSet, analysis) => createJavaScriptApplicationGraph(buildJavaScriptArtifactGraphInput(snapshot, fileSet, analysis));
16
+ /** Build a validated application graph with cooperative immutable ownership. */
17
+ export const buildImmutableJavaScriptArtifactGraphSteps = (snapshot, fileSet, analysis) => createImmutableJavaScriptApplicationGraphSteps(buildJavaScriptArtifactGraphInput(snapshot, fileSet, analysis));
18
+ const buildJavaScriptArtifactGraphInput = (snapshot, fileSet, analysis) => {
12
19
  const accumulator = new JavaScriptArtifactGraphAccumulator();
13
20
  const root = createJavaScriptArtifactRootNode(accumulator, snapshot);
14
21
  const context = {
@@ -29,14 +36,14 @@ export const buildJavaScriptArtifactGraph = (snapshot, fileSet, analysis) => {
29
36
  addJavaScriptArtifactFiles(context);
30
37
  const packageRoots = addJavaScriptPackageNodes(context);
31
38
  addJavaScriptSourceModules(context);
32
- addJavaScriptBundlerNodes(context);
33
- addJavaScriptModuleRelationships(context);
34
- addJavaScriptStaticFindings(context);
39
+ const bundlerLimitations = addJavaScriptBundlerNodes(context);
40
+ const relationshipOmissions = addJavaScriptModuleRelationships(context);
41
+ const findingLimitations = addJavaScriptStaticFindings(context);
35
42
  addElectronBoundaries(context);
36
43
  addJavaScriptHtmlRoles(context);
37
44
  addJavaScriptSourceMapOriginals(context);
38
45
  const coverage = graphCoverage(context);
39
- return createJavaScriptApplicationGraph({
46
+ return {
40
47
  schema: "JavaScriptApplicationGraph",
41
48
  root_node_ids: packageRoots.length === 0
42
49
  ? [root.node_id]
@@ -44,10 +51,15 @@ export const buildJavaScriptArtifactGraph = (snapshot, fileSet, analysis) => {
44
51
  nodes: accumulator.nodes(),
45
52
  edges: accumulator.edges(),
46
53
  coverage,
47
- limitations: graphLimitations(context, coverage.status),
48
- });
54
+ limitations: [
55
+ ...bundlerLimitations,
56
+ ...findingLimitations,
57
+ ...graphLimitations(context, coverage.status, relationshipOmissions),
58
+ ],
59
+ };
49
60
  };
50
61
  const graphCoverage = (context) => {
62
+ const resourceLimits = semanticResourceLimits(context);
51
63
  const sourceMapPolicyGap = context.analysis.source_maps.some(({ status }) => status === "invalid");
52
64
  const malformedStructuredData = context.analysis.packages.some(({ status }) => status !== "included") ||
53
65
  context.analysis.json_modules.some(({ status }) => status !== "included") ||
@@ -60,11 +72,31 @@ const graphCoverage = (context) => {
60
72
  partialJavaScript;
61
73
  if (context.analysis.truncated_scopes > 0)
62
74
  return partialApplicationCoverage([], null);
75
+ if (resourceLimits.length > 0)
76
+ return partialApplicationCoverage(resourceLimits.map(applicationGraphResourceLimit), null);
63
77
  if (unknownGap)
64
78
  return partialApplicationCoverage([], null);
65
79
  return completeApplicationCoverage();
66
80
  };
67
- const graphLimitations = (context, coverage) => {
81
+ const semanticResourceLimits = (context) => [
82
+ ...new Set(context.analysis.files.flatMap(({ semantic }) => semantic === null
83
+ ? []
84
+ : semanticCoverageResourceLimits(semantic.ir.coverage))),
85
+ ].sort();
86
+ const applicationGraphResourceLimit = (resourceLimit) => ({
87
+ name: `javascript_semantic_${resourceLimit.replaceAll("-", "_")}`,
88
+ value: resourceLimit === "primitive-candidates"
89
+ ? SEMANTIC_PRIMITIVE_CANDIDATE_LIMIT
90
+ : resourceLimit === "primitive-bytes"
91
+ ? SEMANTIC_PRIMITIVE_JSON_BYTES_LIMIT
92
+ : SEMANTIC_EXPRESSION_DEPTH_LIMIT,
93
+ unit: resourceLimit === "expression-depth"
94
+ ? "depth"
95
+ : resourceLimit === "primitive-bytes"
96
+ ? "bytes"
97
+ : "items",
98
+ });
99
+ const graphLimitations = (context, coverage, relationshipOmissions) => {
68
100
  const ipc = collectElectronIpcRecords(context.analysis);
69
101
  const pairings = classifyElectronIpcPairings(ipc);
70
102
  const electronFindings = context.analysis.files.reduce((count, { javascript }) => count +
@@ -78,6 +110,7 @@ const graphLimitations = (context, coverage) => {
78
110
  javascript.electron.native_addon_bindings.length), 0);
79
111
  return [
80
112
  ...context.analysis.limitations,
113
+ ...selfReferenceOmissions(relationshipOmissions.selfImports, ["import specifier", "import specifiers"], "the importing module"),
81
114
  "CommonJS and ESM binding relationships were recovered from inert syntax and resolved only within the inventoried artifact container.",
82
115
  "Webpack/Rspack factories were recovered from AST literals; REA did not invoke push handlers or bundle bootstrap code.",
83
116
  "Static imports, entrypoints, workers, endpoints, and storage relationships do not prove runtime execution.",
@@ -101,6 +134,7 @@ const graphLimitations = (context, coverage) => {
101
134
  "Sender, frame, URL, and origin checks are observations only; REA does not claim that they enforce a complete authorization policy.",
102
135
  ]
103
136
  : []),
137
+ ...semanticResourceLimits(context).map(semanticResourceLimitReason),
104
138
  ...(context.analysis.files.some(({ javascript }) => (javascript?.electron.native_addon_bindings.length ?? 0) > 0)
105
139
  ? [
106
140
  "Native member names are requested by JavaScript syntax and are not verified binary exports in this workflow.",
@@ -1,7 +1,8 @@
1
- import { addAstContainsEdge, artifactLocalIdentity, chunkLookupKey, javascriptAnalysisCoverage, moduleLookupKey, } from "./JavaScriptArtifactGraphContext.js";
1
+ import { addAstContainsEdge, artifactLocalIdentity, chunkLookupKey, javascriptAnalysisCoverage, moduleLookupKey, selfReferenceOmissions, } from "./JavaScriptArtifactGraphContext.js";
2
2
  import { astObservationEvidence, staticInferenceEvidence, } from "./JavaScriptArtifactGraphEvidence.js";
3
- /** Project Webpack/Rspack chunk and factory literals recovered from AST. */
3
+ /** Project Webpack/Rspack AST literals and disclose unrepresentable relationships. */
4
4
  export const addJavaScriptBundlerNodes = (context) => {
5
+ let selfAsyncChunks = 0;
5
6
  for (const analyzed of context.analysis.files) {
6
7
  const { file, javascript } = analyzed;
7
8
  const asset = context.assetNodes.get(file.path);
@@ -31,8 +32,9 @@ export const addJavaScriptBundlerNodes = (context) => {
31
32
  addBundlerModuleNodes(context, { ...input, chunk });
32
33
  }
33
34
  for (const record of records)
34
- addBundlerRuntimeEdges(context, record);
35
+ selfAsyncChunks += addBundlerRuntimeEdges(context, record);
35
36
  }
37
+ return selfReferenceOmissions(selfAsyncChunks, ["bundler async-chunk reference", "bundler async-chunk references"], "the requesting chunk");
36
38
  };
37
39
  const createBundlerChunkNode = (context, input) => {
38
40
  const { file, registration, coverage, limitations } = input;
@@ -119,6 +121,7 @@ const addBundlerModuleNodes = (context, input) => {
119
121
  }
120
122
  };
121
123
  const addBundlerRuntimeEdges = (context, record) => {
124
+ let selfAsyncChunks = 0;
122
125
  const { file, registration, chunk, coverage } = record;
123
126
  for (const moduleKey of registration.entry_module_keys) {
124
127
  const resolved = context.moduleNodes.get(moduleLookupKey(file.path, moduleKey));
@@ -147,6 +150,10 @@ const addBundlerRuntimeEdges = (context, record) => {
147
150
  for (const chunkKey of registration.async_chunk_keys) {
148
151
  const lookup = chunkLookupKey(file.path, registration.runtime, chunkKey);
149
152
  const resolved = context.chunkNodes.get(lookup);
153
+ if (resolved?.node_id === chunk.node_id) {
154
+ selfAsyncChunks++;
155
+ continue;
156
+ }
150
157
  const target = resolved ?? unresolvedBundlerChunkNode(context, record, chunkKey);
151
158
  context.accumulator.addEdge({
152
159
  source_node_id: chunk.node_id,
@@ -169,6 +176,7 @@ const addBundlerRuntimeEdges = (context, record) => {
169
176
  }),
170
177
  });
171
178
  }
179
+ return selfAsyncChunks;
172
180
  };
173
181
  const unresolvedBundlerModuleNode = (context, record, moduleKey) => context.accumulator.addNode({
174
182
  kind: "javascript-module",
@@ -161,6 +161,15 @@ export const linkElectronRoleToAsset = (context, input) => {
161
161
  }),
162
162
  });
163
163
  };
164
+ /**
165
+ * Disclose relationships omitted because they resolved to their own source;
166
+ * the application graph forbids self-referential edges.
167
+ */
168
+ export const selfReferenceOmissions = (count, noun, owner) => count === 0
169
+ ? []
170
+ : [
171
+ `${String(count)} ${count === 1 ? noun[0] : noun[1]} resolved back to ${owner} itself and ${count === 1 ? "was" : "were"} omitted; application graph edges cannot be self-referential.`,
172
+ ];
164
173
  /** Deterministic key for one recovered module inside a bundle asset. */
165
174
  export const moduleLookupKey = (path, moduleKey) => `${path}\0${moduleKey}`;
166
175
  /** Deterministic key for one recovered bundler chunk inside a bundle asset. */
@@ -109,16 +109,16 @@ export const addJavaScriptSourceMapOriginals = (context) => {
109
109
  strategy: "source-map-original",
110
110
  stability: "source-map-exact",
111
111
  source_map_sha256: mapFile.sha256,
112
- original_source: original.source,
112
+ original_source: original.reference.source_name,
113
+ source_root: original.reference.source_root,
113
114
  source_sha256: original.content_sha256,
114
115
  },
115
116
  observations: [
116
117
  {
117
- label: original.source,
118
+ label: original.reference.source_name || null,
119
+ source_map_reference: original.reference,
118
120
  properties: {
119
- source: original.source,
120
121
  content_available: original.content !== null,
121
- source_sha256: original.content_sha256,
122
122
  },
123
123
  evidence: artifactObservationEvidence({
124
124
  sha256: mapFile.sha256,
@@ -134,7 +134,10 @@ export const addJavaScriptSourceMapOriginals = (context) => {
134
134
  source_node_id: mapNode.node_id,
135
135
  target_node_id: node.node_id,
136
136
  relation: "contains",
137
- properties: { original_source: original.source },
137
+ properties: {
138
+ original_source: original.reference.source_name,
139
+ source_root: original.reference.source_root,
140
+ },
138
141
  evidence: artifactObservationEvidence({
139
142
  sha256: mapFile.sha256,
140
143
  path: mapFile.path,
@@ -1,8 +1,9 @@
1
- import { addStaticInferenceEdge, artifactLocalIdentity, chunkLookupKey, createElectronRoleNode, javascriptAnalysisCoverage, linkElectronRoleToAsset, moduleLookupKey, resolveArtifactPath, sourceNodeFor, } from "./JavaScriptArtifactGraphContext.js";
1
+ import { addStaticInferenceEdge, artifactLocalIdentity, chunkLookupKey, createElectronRoleNode, javascriptAnalysisCoverage, linkElectronRoleToAsset, moduleLookupKey, resolveArtifactPath, selfReferenceOmissions, sourceNodeFor, } from "./JavaScriptArtifactGraphContext.js";
2
2
  import { astObservationEvidence, staticInferenceEvidence, } from "./JavaScriptArtifactGraphEvidence.js";
3
3
  import { resolveArtifactPathByContext } from "./JavaScriptArtifactPathResolution.js";
4
4
  /** Project imports, workers, roles, endpoints, storage, and source-map links. */
5
5
  export const addJavaScriptStaticFindings = (context) => {
6
+ const omissions = { selfReferences: 0 };
6
7
  for (const analyzed of context.analysis.files) {
7
8
  const { file, javascript } = analyzed;
8
9
  const asset = context.assetNodes.get(file.path);
@@ -10,7 +11,7 @@ export const addJavaScriptStaticFindings = (context) => {
10
11
  continue;
11
12
  const coverage = javascriptAnalysisCoverage(javascript);
12
13
  for (const value of javascript.references)
13
- addReference(context, { file, asset, value, coverage });
14
+ addReference(context, { file, asset, value, coverage }, omissions);
14
15
  for (const value of javascript.endpoints)
15
16
  addEndpoint(context, { file, asset, value, coverage });
16
17
  for (const value of javascript.storage)
@@ -20,8 +21,9 @@ export const addJavaScriptStaticFindings = (context) => {
20
21
  for (const value of javascript.source_map_urls)
21
22
  addSourceMapEdge(context, { file, asset, value, coverage });
22
23
  }
24
+ return selfReferenceOmissions(omissions.selfReferences, ["static reference", "static references"], "the referencing module");
23
25
  };
24
- const addReference = (context, input) => {
26
+ const addReference = (context, input, omissions) => {
25
27
  const source = sourceNodeFor(context, input.file.path, input.value.module_key) ??
26
28
  input.asset;
27
29
  const resolved = input.value.specifier === null
@@ -70,6 +72,13 @@ const addReference = (context, input) => {
70
72
  });
71
73
  return;
72
74
  }
75
+ // A reference that resolves to its own source, such as a bundled module
76
+ // requiring its own key, cannot become an edge: the application graph
77
+ // forbids self-referential edges and one would fail the whole analysis.
78
+ if (resolved?.node.node_id === source.node_id) {
79
+ omissions.selfReferences += 1;
80
+ return;
81
+ }
73
82
  const target = resolved?.node ??
74
83
  unresolvedReferenceNode(context, input.file, input.value, input.coverage);
75
84
  addStaticInferenceEdge(context, {
@@ -2,7 +2,6 @@ import { completeApplicationCoverage } from "../../domain/javascript/javascriptA
2
2
  import { addArtifactContainsEdge, addUnavailableStaticParseScope, artifactFileNodeKind, artifactLocalIdentity, createElectronRoleNode, linkElectronRoleToAsset, } from "./JavaScriptArtifactGraphContext.js";
3
3
  import { artifactObservationEvidence, staticInferenceEvidence, } from "./JavaScriptArtifactGraphEvidence.js";
4
4
  import { resolveArtifactPathByContext } from "./JavaScriptArtifactPathResolution.js";
5
- export { addJavaScriptBundlerNodes } from "./JavaScriptArtifactGraphBundlers.js";
6
5
  /** Create the exact root artifact node from the inventory manifest. */
7
6
  export const createJavaScriptArtifactRootNode = (accumulator, snapshot) => {
8
7
  const root = snapshot.nodes.find(({ artifact_id: id }) => id === snapshot.manifest.root_artifact_id);