rea-agents 6.2.0 → 6.4.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 (636) hide show
  1. package/README.md +24 -23
  2. package/bridge/ghidra/ReaGhidraApplySeeds.java +151 -0
  3. package/bridge/ghidra/ReaGhidraBridge.java +597 -209
  4. package/bridge/ghidra/ReaGhidraNoReturnFix.java +123 -0
  5. package/bridge/hopper_bridge.py +2 -0
  6. package/dist/adb/AdbConfiguration.js +88 -0
  7. package/dist/adb/AdbDeviceOutput.js +186 -0
  8. package/dist/adb/AdbProvider.js +1190 -0
  9. package/dist/adb/AdbShellOutput.js +309 -0
  10. package/dist/android/AndroidTargetSnapshot.js +104 -22
  11. package/dist/android/JadxConfiguration.js +44 -24
  12. package/dist/android/JadxProvider.js +59 -21
  13. package/dist/android/JadxSession.js +51 -9
  14. package/dist/apktool/ApktoolConfiguration.js +84 -0
  15. package/dist/apktool/ApktoolDecodeOutput.js +59 -0
  16. package/dist/apktool/ApktoolProvider.js +506 -0
  17. package/dist/application/AnalysisProvider.js +8 -2
  18. package/dist/application/AppBundleExecutable.js +27 -22
  19. package/dist/application/BinaryTargetResolver.js +85 -19
  20. package/dist/application/BrowserScenarioEvidence.js +2 -2
  21. package/dist/application/CapabilityInventory.js +11 -1
  22. package/dist/application/ClientConfigurationDocument.js +98 -0
  23. package/dist/application/ClientConfigurationFiles.js +91 -0
  24. package/dist/application/ClientRegistrationEnvironment.js +35 -0
  25. package/dist/application/ClientRegistrationStatus.js +75 -27
  26. package/dist/application/DirectAnalysis.js +14 -8
  27. package/dist/application/DirectAnalysisCleanup.js +1 -2
  28. package/dist/application/DirectAnalysisStatus.js +3 -6
  29. package/dist/application/Doctor.js +27 -34
  30. package/dist/application/DoctorDiagnostics.js +1 -1
  31. package/dist/application/EvidenceBundleCommands.js +6 -12
  32. package/dist/application/EvidenceBundleFiles.js +1 -1
  33. package/dist/application/GeminiClientSettings.js +139 -0
  34. package/dist/application/HermesClientHome.js +115 -0
  35. package/dist/application/HopperDownload.js +39 -0
  36. package/dist/application/InvestigationProviders.js +10 -4
  37. package/dist/application/JsonFiles.js +16 -15
  38. package/dist/application/JsonInputFile.js +252 -0
  39. package/dist/application/LinuxHopper.js +6 -13
  40. package/dist/application/MacHopper.js +172 -149
  41. package/dist/application/MipsElfAbiFlags.js +140 -0
  42. package/dist/application/ProviderOperationExecution.js +31 -0
  43. package/dist/application/ReconstructionObligationCandidates.js +16 -3
  44. package/dist/application/ReconstructionObligationLedgerProjection.js +3 -1
  45. package/dist/application/ReferenceSourceImport.js +76 -29
  46. package/dist/application/ReferenceSourceImportEntries.js +18 -9
  47. package/dist/application/ReferenceSourceImportPolicy.js +99 -23
  48. package/dist/application/ReferenceSourceImportTypes.js +30 -22
  49. package/dist/application/ReferenceSourceVcsAdapter.js +145 -30
  50. package/dist/application/RegularFileRead.js +103 -0
  51. package/dist/application/Setup.js +69 -10
  52. package/dist/application/SetupClientConfiguration.js +134 -23
  53. package/dist/application/SetupHost.js +102 -22
  54. package/dist/application/SetupPlan.js +18 -17
  55. package/dist/application/SetupSkill.js +81 -13
  56. package/dist/application/SupportedClients.js +305 -37
  57. package/dist/application/Uninstall.js +172 -8
  58. package/dist/application/UpdateMaintenance.js +23 -23
  59. package/dist/application/Utf8JsonInput.js +71 -0
  60. package/dist/application/WebScriptExportService.js +130 -57
  61. package/dist/application/WebSourceLocationService.js +3 -0
  62. package/dist/application/adb/AdbDeviceAnalysisPort.js +1 -0
  63. package/dist/application/adb/AdbDeviceAnalysisService.js +13 -0
  64. package/dist/application/analysisView/AnalysisViewService.js +40 -2
  65. package/dist/application/android/AndroidAnalysisService.js +1 -1
  66. package/dist/application/apktool/ApktoolResourceAnalysisPort.js +1 -0
  67. package/dist/application/apktool/ApktoolResourceAnalysisService.js +13 -0
  68. package/dist/application/binary/AnalysisClientCleanup.js +0 -24
  69. package/dist/application/binary/AnalysisSnapshotCache.js +5 -4
  70. package/dist/application/binary/BinarySession.js +18 -1
  71. package/dist/application/binary/BinarySessionOpen.js +9 -1
  72. package/dist/application/binaryDiagnostics/BinaryLayoutService.js +2 -1
  73. package/dist/application/binaryDiagnostics/PeResourcesPort.js +1 -0
  74. package/dist/application/binaryDiagnostics/PeResourcesService.js +111 -0
  75. package/dist/application/binaryDiagnostics/RecordedCrashService.js +2 -1
  76. package/dist/application/evm/EvmInterfaceService.js +3 -0
  77. package/dist/application/firmware/FirmwareAnalysisService.js +3 -0
  78. package/dist/application/investigation/InspectEvidenceBundle.js +18 -0
  79. package/dist/application/javascript/ElectronActiveEvidence.js +2 -2
  80. package/dist/application/javascript/ElectronBoundaryAnalysis.js +2 -2
  81. package/dist/application/javascript/ElectronBoundaryGraphContext.js +3 -2
  82. package/dist/application/javascript/ElectronBoundaryGraphIpc.js +2 -2
  83. package/dist/application/javascript/ElectronBoundaryGraphNative.js +20 -3
  84. package/dist/application/javascript/ElectronBoundaryGraphWindows.js +3 -3
  85. package/dist/application/javascript/JavaScriptApplicationEvidence.js +1 -0
  86. package/dist/application/javascript/JavaScriptApplicationEvidenceGraph.js +107 -46
  87. package/dist/application/javascript/JavaScriptApplicationService.js +23 -11
  88. package/dist/application/javascript/JavaScriptApplicationWorkflowEvidence.js +5 -6
  89. package/dist/application/javascript/JavaScriptApplicationWorkflowService.js +59 -45
  90. package/dist/application/javascript/JavaScriptArtifactAnalysis.js +171 -36
  91. package/dist/application/javascript/JavaScriptArtifactGraphAccumulator.js +14 -16
  92. package/dist/application/javascript/JavaScriptArtifactGraphBuilder.js +74 -36
  93. package/dist/application/javascript/JavaScriptArtifactGraphBundlers.js +4 -3
  94. package/dist/application/javascript/JavaScriptArtifactGraphContext.js +11 -5
  95. package/dist/application/javascript/JavaScriptArtifactGraphFindings.js +53 -42
  96. package/dist/application/javascript/JavaScriptArtifactGraphStructure.js +92 -10
  97. package/dist/application/javascript/JavaScriptArtifactPathResolution.js +293 -238
  98. package/dist/application/javascript/JavaScriptArtifactReconstruction.js +120 -28
  99. package/dist/application/javascript/JavaScriptArtifactReconstructionInput.js +4 -0
  100. package/dist/application/javascript/JavaScriptJsonModules.js +2 -2
  101. package/dist/application/javascript/JavaScriptModuleRelationships.js +10 -20
  102. package/dist/application/javascript/JavaScriptRecoveryService.js +3 -0
  103. package/dist/application/javascript/JavaScriptRuntimeReconciliationService.js +11 -27
  104. package/dist/application/javascript/JavaScriptSemanticGraphAsyncProjection.js +11 -5
  105. package/dist/application/javascript/JavaScriptSemanticGraphBuilder.js +206 -66
  106. package/dist/application/javascript/JavaScriptSemanticGraphChildProcessProjection.js +1 -1
  107. package/dist/application/javascript/JavaScriptSemanticGraphConstruction.js +18 -23
  108. package/dist/application/javascript/JavaScriptSemanticGraphDataProjection.js +5 -2
  109. package/dist/application/javascript/JavaScriptSemanticGraphEvidence.js +1 -1
  110. package/dist/application/javascript/JavaScriptSemanticGraphFingerprintProjection.js +2 -2
  111. package/dist/application/javascript/JavaScriptSemanticGraphFlowProjection.js +7 -5
  112. package/dist/application/javascript/JavaScriptSemanticGraphObjectProjection.js +6 -4
  113. package/dist/application/javascript/JavaScriptSemanticGraphProjection.js +4 -4
  114. package/dist/application/javascript/JavaScriptSemanticGraphResourceProjection.js +1 -1
  115. package/dist/application/javascript/JavaScriptSemanticGraphValueProjection.js +29 -15
  116. package/dist/application/javascript/JavaScriptSemanticTraceService.js +15 -10
  117. package/dist/application/jeb/JebAnalysisPort.js +1 -0
  118. package/dist/application/jeb/JebAnalysisService.js +13 -0
  119. package/dist/application/managed/ManagedApplicationGraphService.js +1 -1
  120. package/dist/application/native/NativeCallRoutes.js +2 -4
  121. package/dist/application/native/NativeUiActionTrace.js +16 -8
  122. package/dist/application/native/NativeValueTrace.js +23 -6
  123. package/dist/application/process/ProcessCli.js +25 -20
  124. package/dist/artifacts/ArtifactPaths.js +129 -8
  125. package/dist/artifacts/ArtifactProvider.js +34 -31
  126. package/dist/artifacts/ArtifactProviderMetadata.js +1 -4
  127. package/dist/artifacts/ArtifactReader.js +23 -0
  128. package/dist/artifacts/ArtifactResourceScope.js +100 -0
  129. package/dist/artifacts/AsarArtifactReader.js +218 -80
  130. package/dist/artifacts/AsarHeader.js +24 -0
  131. package/dist/artifacts/DirectoryArtifactReader.js +168 -65
  132. package/dist/artifacts/MachOSliceArtifactReader.js +116 -39
  133. package/dist/artifacts/NativeDmgArtifactReader.js +179 -87
  134. package/dist/artifacts/NativeDmgOwnership.js +109 -0
  135. package/dist/artifacts/SafeOutputTree.js +245 -70
  136. package/dist/artifacts/SafeOutputTreeCleanup.js +45 -0
  137. package/dist/artifacts/SafeOutputTreeCreationFailure.js +20 -0
  138. package/dist/artifacts/SafeOutputTreeIdentity.js +42 -0
  139. package/dist/artifacts/SafeOutputTreeReadback.js +33 -0
  140. package/dist/artifacts/ZipArtifactReader.js +77 -27
  141. package/dist/artifacts/apple/InterfaceBuilderAnalysis.js +58 -18
  142. package/dist/artifacts/apple/InterfaceBuilderDecodeBudget.js +62 -24
  143. package/dist/artifacts/apple/KeyedArchiveReader.js +76 -49
  144. package/dist/artifacts/apple/MachoLoadCommandReader.js +36 -6
  145. package/dist/artifacts/extraction/ArtifactExtraction.js +134 -92
  146. package/dist/artifacts/inventory/ArtifactGraphConstruction.js +116 -50
  147. package/dist/artifacts/inventory/ArtifactInventory.js +5 -4
  148. package/dist/artifacts/inventory/classify.js +87 -25
  149. package/dist/artifacts/inventory/hashStableRootArtifact.js +70 -0
  150. package/dist/artifacts/inventory/reader.js +13 -5
  151. package/dist/artifacts/inventory/scanCanonical.js +73 -30
  152. package/dist/artifacts/inventory/scanReader.js +43 -20
  153. package/dist/artifacts/javascript/JavaScriptArtifactFiles.js +72 -28
  154. package/dist/artifacts/javascript/JavaScriptSourceAnalysis.js +3 -0
  155. package/dist/browser/BrowserScenarioPartialObservation.js +8 -2
  156. package/dist/browser/BrowserScenarioSecrets.js +52 -37
  157. package/dist/browser/CdpBrowserProvider.js +9 -3
  158. package/dist/browser/CdpCaptureDocuments.js +40 -6
  159. package/dist/browser/CdpCaptureDomSvg.js +210 -0
  160. package/dist/browser/CdpCaptureEventBodyShapes.js +4 -8
  161. package/dist/browser/CdpCaptureEventHandlers.js +26 -9
  162. package/dist/browser/CdpCaptureEvents.js +4 -9
  163. package/dist/browser/CdpCaptureStorageFingerprints.js +3 -3
  164. package/dist/browser/CdpConnection.js +22 -5
  165. package/dist/browser/CdpElectronInspection.js +2 -2
  166. package/dist/browser/CdpElectronProvider.js +4 -3
  167. package/dist/browser/CdpElectronScripts.js +2 -2
  168. package/dist/browser/CdpPageCapture.js +1 -1
  169. package/dist/browser/CdpTargetSession.js +30 -34
  170. package/dist/browser/CdpWebMcpDiscovery.js +48 -23
  171. package/dist/browser/ElectronFileScope.js +99 -9
  172. package/dist/browser/PlaywrightBrowserScenarioProvider.js +63 -7
  173. package/dist/browser/PlaywrightElectronActiveProvider.js +11 -6
  174. package/dist/browser/PlaywrightScenarioArtifacts.js +5 -5
  175. package/dist/browser/PlaywrightScenarioBrowser.js +208 -43
  176. package/dist/browser/PlaywrightScenarioSession.js +130 -65
  177. package/dist/browser/PlaywrightScenarioStorage.js +507 -0
  178. package/dist/browser/PngVisualDiff.js +198 -29
  179. package/dist/browser/WebSourceMapFetcher.js +35 -9
  180. package/dist/browser/assets/LocalWebScriptArtifacts.js +3 -1
  181. package/dist/browser/assets/PublishWebScripts.js +75 -20
  182. package/dist/browser/assets/ScenarioScriptCapture.js +8 -12
  183. package/dist/browser/assets/WebArtifactReads.js +23 -1
  184. package/dist/browser/assets/WebSourceLocationArtifacts.js +1 -0
  185. package/dist/browser/execution/CdpExecutionCapture.js +3 -3
  186. package/dist/browser/execution/CdpPreciseCoverage.js +5 -8
  187. package/dist/browser/history/HarCapture.js +14 -0
  188. package/dist/browser/history/HarCaptureProcess.js +2 -10
  189. package/dist/browser/history/MitmproxyCaptureAdapter.js +3 -1
  190. package/dist/browser/modules/WebModuleArtifacts.js +1 -0
  191. package/dist/cli/adbCommands.js +337 -0
  192. package/dist/cli/analysisViewCommands.js +39 -1
  193. package/dist/cli/apktoolCommands.js +53 -0
  194. package/dist/cli/artifactCommands.js +8 -11
  195. package/dist/cli/binaryDiagnosticsCommands.js +19 -1
  196. package/dist/cli/browserAdvancedCommands.js +65 -36
  197. package/dist/cli/coreAnalysisCommands.js +2 -2
  198. package/dist/cli/coreBinaryCommands.js +12 -13
  199. package/dist/cli/coreNativeCommands.js +1 -14
  200. package/dist/cli/electronCommands.js +14 -10
  201. package/dist/cli/evmCommands.js +13 -4
  202. package/dist/cli/firmwareCommands.js +7 -2
  203. package/dist/cli/javascriptApplicationAnalysis.js +19 -13
  204. package/dist/cli/javascriptRecoveryCommands.js +22 -15
  205. package/dist/cli/jebCommands.js +99 -0
  206. package/dist/cli/jsonOutput.js +12 -4
  207. package/dist/cli/referenceSourceImportStatus.js +7 -0
  208. package/dist/cli/setupCommands.js +15 -3
  209. package/dist/cli/streamedJsonOutput.js +83 -4
  210. package/dist/cli/utilityCommands.js +68 -22
  211. package/dist/cli/webScriptCommands.js +20 -1
  212. package/dist/cli/webSourceLocationCommands.js +21 -9
  213. package/dist/cli.js +11 -2
  214. package/dist/cliBrowserScenarioCommands.js +2 -1
  215. package/dist/cliCommandNames.js +32 -0
  216. package/dist/cliJsonInput.js +47 -34
  217. package/dist/cliObservationOptions.js +7 -0
  218. package/dist/composition/adb.js +3 -0
  219. package/dist/composition/apktool.js +3 -0
  220. package/dist/composition/auxiliaryAnalysisProviders.js +5 -4
  221. package/dist/composition/binaryDiagnostics.js +4 -0
  222. package/dist/composition/browserScenario.js +2 -2
  223. package/dist/composition/directAnalysis.js +14 -7
  224. package/dist/composition/javascriptAnalysisWorkerProcess.js +48 -0
  225. package/dist/composition/jeb.js +6 -0
  226. package/dist/config/environment.js +10 -0
  227. package/dist/config/ghidraLanguageOverride.js +9 -0
  228. package/dist/config/mcpInputSchemaProfile.js +27 -0
  229. package/dist/config/parseConfig.js +28 -1
  230. package/dist/contracts/adb/adbToolContracts.js +353 -0
  231. package/dist/contracts/advertisedInputExamples.js +48 -0
  232. package/dist/contracts/analysisDetail.js +10 -0
  233. package/dist/contracts/analysisViewToolContracts.js +17 -2
  234. package/dist/contracts/apktool/apktoolToolContracts.js +33 -0
  235. package/dist/contracts/artifactComparisonExample.js +5 -5
  236. package/dist/contracts/artifactToolContracts.js +8 -5
  237. package/dist/contracts/browserToolContracts.js +1 -1
  238. package/dist/contracts/compactInputSchema.js +256 -0
  239. package/dist/contracts/errorSchemas.js +3 -1
  240. package/dist/contracts/functionComparisonExample.js +8 -0
  241. package/dist/contracts/functionWorkflowToolContracts.js +1 -1
  242. package/dist/contracts/inputSchemaPresentation.js +104 -13
  243. package/dist/contracts/javascript/electronToolContracts.js +16 -3
  244. package/dist/contracts/javascript/javascriptApplicationWorkflowExamples.js +3 -2
  245. package/dist/contracts/javascript/javascriptExportShapeComparisonExample.js +6 -3
  246. package/dist/contracts/javascript/javascriptRecoveryToolContracts.js +1 -1
  247. package/dist/contracts/javascript/javascriptRuntimeReconciliationExample.js +8 -7
  248. package/dist/contracts/jeb/jebToolContracts.js +64 -0
  249. package/dist/contracts/managed/managedToolContracts.js +3 -2
  250. package/dist/contracts/mobileApplicationGraphExamples.js +5 -5
  251. package/dist/contracts/native/binaryDiagnosticsToolContracts.js +25 -3
  252. package/dist/contracts/native/nativeToolContracts.js +1 -1
  253. package/dist/contracts/officialToolContracts.js +5 -5
  254. package/dist/contracts/sessionLifecycleInputs.js +4 -3
  255. package/dist/contracts/sessionStatusContract.js +3 -2
  256. package/dist/contracts/sessionToolContracts.js +5 -4
  257. package/dist/contracts/sessionToolSchemas.js +9 -4
  258. package/dist/contracts/toolContractExamples.js +6 -0
  259. package/dist/contracts/toolContractTypes.js +3 -0
  260. package/dist/contracts/toolContracts.js +6 -0
  261. package/dist/contracts/toolEffects.js +167 -0
  262. package/dist/contracts/toolOutputSchemaGroups.js +7 -5
  263. package/dist/contracts/toolOutputSchemaPrimitives.js +2 -5
  264. package/dist/contracts/toolSchemaMetadata.js +82 -7
  265. package/dist/domain/adb/adbDeviceAnalysis.js +583 -0
  266. package/dist/domain/analysisErrorBase.js +5 -0
  267. package/dist/domain/analysisErrorCleanup.js +29 -0
  268. package/dist/domain/analysisErrorPresentation.js +18 -4
  269. package/dist/domain/analysisErrorProjection.js +4 -1
  270. package/dist/domain/analysisSnapshot.js +5 -2
  271. package/dist/domain/analysisView/analysisView.js +53 -5
  272. package/dist/domain/analysisView/binaryLayoutView.js +2 -0
  273. package/dist/domain/analysisView/javascriptApplicationView.js +2 -0
  274. package/dist/domain/analysisView/nativeFunctionView.js +155 -0
  275. package/dist/domain/android/androidApplication.js +25 -20
  276. package/dist/domain/android/androidPartialObservation.js +36 -0
  277. package/dist/domain/apktool/apktoolResourceAnalysis.js +77 -0
  278. package/dist/domain/apple/appleApplication.js +40 -23
  279. package/dist/domain/apple/appleBundleAnatomy.js +95 -28
  280. package/dist/domain/apple/dyldPaths.js +9 -1
  281. package/dist/domain/apple/dylibResolution.js +3 -3
  282. package/dist/domain/apple/interfaceBuilderGraph.js +22 -19
  283. package/dist/domain/apple/interfaceBuilderKeyedArchive.js +10 -1
  284. package/dist/domain/artifactComparison.js +39 -11
  285. package/dist/domain/artifactGraph.js +6 -4
  286. package/dist/domain/artifactIdentity.js +37 -9
  287. package/dist/domain/artifactInspection.js +10 -50
  288. package/dist/domain/artifactIntegrityPolicy.js +10 -0
  289. package/dist/domain/artifactInventoryEvidence.js +16 -17
  290. package/dist/domain/artifactPathSyntax.js +1 -1
  291. package/dist/domain/binaryTarget.js +16 -0
  292. package/dist/domain/binaryTargetTypes.js +8 -1
  293. package/dist/domain/browserCompleteness.js +3 -2
  294. package/dist/domain/browserObservationSchemas.js +8 -4
  295. package/dist/domain/browserScenarioCaptureValues.js +2 -2
  296. package/dist/domain/browserScenarioNormalization.js +3 -3
  297. package/dist/domain/browserScenarioValues.js +3 -2
  298. package/dist/domain/callPath.js +8 -10
  299. package/dist/domain/canonicalDigest.js +7 -1
  300. package/dist/domain/canonicalJsonDigestSteps.js +34 -12
  301. package/dist/domain/canonicalOrdering.js +1 -13
  302. package/dist/domain/changedBehavior.js +2 -3
  303. package/dist/domain/compactStringIdentity.js +9 -0
  304. package/dist/domain/comparisonSemantics.js +0 -5
  305. package/dist/domain/digests.js +0 -3
  306. package/dist/domain/evidence.js +12 -6
  307. package/dist/domain/evidenceBundle.js +51 -33
  308. package/dist/domain/evidenceRecordSummary.js +144 -0
  309. package/dist/domain/firmware/firmwareAnalysis.js +4 -3
  310. package/dist/domain/functionComparison.js +2 -1
  311. package/dist/domain/functionComparisonNormalization.js +4 -3
  312. package/dist/domain/functionComparisonResults.js +2 -2
  313. package/dist/domain/functionDossierEvidence.js +2 -1
  314. package/dist/domain/hopperValues.js +11 -15
  315. package/dist/domain/inputIssueProjection.js +16 -1
  316. package/dist/domain/javascript/electronActiveObservation.js +4 -3
  317. package/dist/domain/javascript/electronStaticAnalysisBrowser.js +14 -15
  318. package/dist/domain/javascript/electronStaticAnalysisIpc.js +20 -21
  319. package/dist/domain/javascript/electronStaticAnalysisNative.js +73 -41
  320. package/dist/domain/javascript/electronStaticAnalysisValues.js +24 -4
  321. package/dist/domain/javascript/javascriptAnalysisResourceControls.js +45 -0
  322. package/dist/domain/javascript/javascriptApplicationAnalysis.js +6 -1
  323. package/dist/domain/javascript/javascriptApplicationChangeGraph.js +18 -14
  324. package/dist/domain/javascript/javascriptApplicationEvidenceSchemas.js +4 -0
  325. package/dist/domain/javascript/javascriptApplicationGraph.js +91 -28
  326. package/dist/domain/javascript/javascriptApplicationProjectionResources.js +35 -0
  327. package/dist/domain/javascript/javascriptApplicationVersionComparison.js +4 -4
  328. package/dist/domain/javascript/javascriptApplicationVersionComparisonSchemas.js +37 -22
  329. package/dist/domain/javascript/javascriptApplicationVersionItems.js +72 -45
  330. package/dist/domain/javascript/javascriptApplicationVersionKeys.js +16 -8
  331. package/dist/domain/javascript/javascriptAstFingerprint.js +60 -33
  332. package/dist/domain/javascript/javascriptAstValues.js +54 -0
  333. package/dist/domain/javascript/javascriptElectronMemberWrites.js +50 -0
  334. package/dist/domain/javascript/javascriptExportShapeComparison.js +3 -2
  335. package/dist/domain/javascript/javascriptExportShapeComparisonSchemas.js +31 -23
  336. package/dist/domain/javascript/javascriptExportShapeSelection.js +2 -2
  337. package/dist/domain/javascript/javascriptExportShapeVariants.js +3 -2
  338. package/dist/domain/javascript/javascriptFeatureSeed.js +5 -3
  339. package/dist/domain/javascript/javascriptFeatureTrace.js +7 -6
  340. package/dist/domain/javascript/javascriptFeatureTraceSchemas.js +17 -9
  341. package/dist/domain/javascript/javascriptFeatureTraversal.js +4 -4
  342. package/dist/domain/javascript/javascriptModuleSemanticIr.js +15 -0
  343. package/dist/domain/javascript/javascriptNativeHandoff.js +12 -7
  344. package/dist/domain/javascript/javascriptRpcEndpoints.js +253 -0
  345. package/dist/domain/javascript/javascriptRuntimeLoadState.js +1 -3
  346. package/dist/domain/javascript/javascriptRuntimeObservation.js +8 -5
  347. package/dist/domain/javascript/javascriptRuntimeReconciliation.js +12 -6
  348. package/dist/domain/javascript/javascriptRuntimeReconciliationActive.js +9 -8
  349. package/dist/domain/javascript/javascriptRuntimeReconciliationCaptureParsing.js +212 -0
  350. package/dist/domain/javascript/javascriptRuntimeReconciliationGraph.js +12 -6
  351. package/dist/domain/javascript/javascriptRuntimeReconciliationInputValidation.js +28 -0
  352. package/dist/domain/javascript/javascriptRuntimeReconciliationMatching.js +5 -5
  353. package/dist/domain/javascript/javascriptRuntimeReconciliationParsing.js +12 -223
  354. package/dist/domain/javascript/javascriptRuntimeReconciliationResult.js +2 -2
  355. package/dist/domain/javascript/javascriptRuntimeReconciliationRuntime.js +15 -4
  356. package/dist/domain/javascript/javascriptRuntimeReconciliationSchemas.js +2 -2
  357. package/dist/domain/javascript/javascriptRuntimeStaticCandidates.js +15 -17
  358. package/dist/domain/javascript/javascriptSemanticAnalysis.js +379 -30
  359. package/dist/domain/javascript/javascriptSemanticCallResolution.js +9 -7
  360. package/dist/domain/javascript/javascriptSemanticCallableResults.js +42 -0
  361. package/dist/domain/javascript/javascriptSemanticCalls.js +8 -1
  362. package/dist/domain/javascript/javascriptSemanticChildProcesses.js +2 -2
  363. package/dist/domain/javascript/javascriptSemanticCoverage.js +20 -0
  364. package/dist/domain/javascript/javascriptSemanticDataEffectHelpers.js +7 -9
  365. package/dist/domain/javascript/javascriptSemanticDataEffects.js +4 -11
  366. package/dist/domain/javascript/javascriptSemanticDerivedAnalysis.js +15 -4
  367. package/dist/domain/javascript/javascriptSemanticFileProjection.js +1 -0
  368. package/dist/domain/javascript/javascriptSemanticFingerprints.js +43 -42
  369. package/dist/domain/javascript/javascriptSemanticGraph.js +205 -52
  370. package/dist/domain/javascript/javascriptSemanticGraphSchemas.js +21 -11
  371. package/dist/domain/javascript/javascriptSemanticIr.js +0 -4
  372. package/dist/domain/javascript/javascriptSemanticIterationSources.js +139 -0
  373. package/dist/domain/javascript/javascriptSemanticMemberMutations.js +774 -136
  374. package/dist/domain/javascript/javascriptSemanticMutationInitializers.js +190 -0
  375. package/dist/domain/javascript/javascriptSemanticMutationValues.js +98 -41
  376. package/dist/domain/javascript/javascriptSemanticObjectReferences.js +381 -0
  377. package/dist/domain/javascript/javascriptSemanticObjects.js +9 -7
  378. package/dist/domain/javascript/javascriptSemanticPrimitives.js +7 -2
  379. package/dist/domain/javascript/javascriptSemanticProjection.js +72 -28
  380. package/dist/domain/javascript/javascriptSemanticPromises.js +15 -21
  381. package/dist/domain/javascript/javascriptSemanticPropertyPaths.js +100 -0
  382. package/dist/domain/javascript/javascriptSemanticProvenance.js +3 -3
  383. package/dist/domain/javascript/javascriptSemanticQuery.js +33 -29
  384. package/dist/domain/javascript/javascriptSemanticQueryIdentity.js +4 -5
  385. package/dist/domain/javascript/javascriptSemanticQuerySchemas.js +8 -9
  386. package/dist/domain/javascript/javascriptSemanticRequireOrigin.js +16 -10
  387. package/dist/domain/javascript/javascriptSemanticReturnedReferences.js +219 -0
  388. package/dist/domain/javascript/javascriptSemanticReturns.js +34 -48
  389. package/dist/domain/javascript/javascriptSemanticState.js +22 -2
  390. package/dist/domain/javascript/javascriptSemanticTraversal.js +25 -2
  391. package/dist/domain/javascript/javascriptSemanticValues.js +169 -30
  392. package/dist/domain/javascript/javascriptSourceAnalysis.js +1 -0
  393. package/dist/domain/javascript/javascriptSourceMapPaths.js +11 -1
  394. package/dist/domain/javascript/javascriptSourceParser.js +34 -9
  395. package/dist/domain/javascript/javascriptStaticAnalysis.js +29 -17
  396. package/dist/domain/javascript/javascriptStaticAnalysisBundler.js +13 -12
  397. package/dist/domain/javascript/javascriptStaticAnalysisCalls.js +49 -5
  398. package/dist/domain/javascript/javascriptStaticAnalysisFindings.js +8 -4
  399. package/dist/domain/javascript/javascriptStaticAnalysisHelpers.js +26 -15
  400. package/dist/domain/javascript/javascriptStaticAnalysisState.js +1 -0
  401. package/dist/domain/javascript/sourceToBundleComparison.js +7 -5
  402. package/dist/domain/javascript/sourceToBundleSignals.js +7 -7
  403. package/dist/domain/jeb/jebAnalysis.js +114 -0
  404. package/dist/domain/jsonSerialization.js +109 -55
  405. package/dist/domain/jsonShape.js +69 -31
  406. package/dist/domain/jsonValue.js +3 -0
  407. package/dist/domain/localPath.js +10 -4
  408. package/dist/domain/managed/managedApplicationGraph.js +47 -6
  409. package/dist/domain/managed/managedApplicationGraphCoverage.js +8 -2
  410. package/dist/domain/managed/managedApplicationGraphNodes.js +94 -59
  411. package/dist/domain/managed/managedArtifact.js +1 -0
  412. package/dist/domain/managed/managedInspectionEvidence.js +13 -0
  413. package/dist/domain/managed/managedMemberComparisonMatch.js +6 -7
  414. package/dist/domain/native/nativeAotPe.js +1408 -0
  415. package/dist/domain/native/nativeCallObservation.js +2 -4
  416. package/dist/domain/native/nativeInstruction.js +21 -0
  417. package/dist/domain/native/nativeMetadataRecovery.js +79 -6
  418. package/dist/domain/native/nativeValueFlow.js +5 -11
  419. package/dist/domain/native/objcSwiftMetadata.js +15 -17
  420. package/dist/domain/native/peResources.js +94 -0
  421. package/dist/domain/nativeConvention.js +33 -0
  422. package/dist/domain/process/processCapture.js +102 -11
  423. package/dist/domain/process/processCaptureCoverage.js +8 -5
  424. package/dist/domain/process/processCaptureExample.js +67 -0
  425. package/dist/domain/process/processCaptureValidation.js +83 -3
  426. package/dist/domain/process/processComparison.js +0 -23
  427. package/dist/domain/process/processScenario.js +62 -10
  428. package/dist/domain/process/processTraceEvaluation.js +4 -4
  429. package/dist/domain/process/processTraceSpecification.js +1 -3
  430. package/dist/domain/propertyListKeys.js +3 -1
  431. package/dist/domain/providerCleanupError.js +6 -2
  432. package/dist/domain/reconstructionCoverage.js +2 -1
  433. package/dist/domain/reconstructionUnknowns.js +4 -3
  434. package/dist/domain/reconstructionVerification.js +3 -2
  435. package/dist/domain/referenceSourceGraph.js +32 -23
  436. package/dist/domain/referenceSourceImportParsing.js +40 -48
  437. package/dist/domain/referenceSourcePathIdentity.js +22 -0
  438. package/dist/domain/referenceSourceRequireBindings.js +137 -0
  439. package/dist/domain/residualUnknown.js +3 -2
  440. package/dist/domain/staticRuntimeCorrelation.js +2 -1
  441. package/dist/domain/swiftSymbolClassification.js +6 -1
  442. package/dist/domain/symbolAnalysis.js +17 -2
  443. package/dist/domain/unicodeCodePointOrder.js +6 -0
  444. package/dist/domain/webBundleAnalyzerInspection.js +23 -3
  445. package/dist/domain/webCaptureDiff.js +170 -30
  446. package/dist/domain/webCaptureDiffSchemas.js +2 -8
  447. package/dist/domain/webInventory.js +3 -2
  448. package/dist/domain/webMcpDiscovery.js +4 -3
  449. package/dist/domain/webScriptExport.js +1 -1
  450. package/dist/domain/webScriptExportError.js +10 -4
  451. package/dist/domain/webScriptExportPlan.js +7 -13
  452. package/dist/domain/zipPackageFormat.js +4 -1
  453. package/dist/domain/zodCollectionSteps.js +24 -0
  454. package/dist/dotnet/ManagedArtifactInspector.js +55 -43
  455. package/dist/dotnet/ManagedDecodeBudget.js +80 -0
  456. package/dist/dotnet/ManagedMemberInspector.js +13 -6
  457. package/dist/dotnet/ManagedMemberInspectorCore.js +2 -2
  458. package/dist/dotnet/ManagedMemberInstructionDecoder.js +5 -4
  459. package/dist/dotnet/ManagedMemberRows.js +9 -4
  460. package/dist/dotnet/ManagedMetadataHeaps.js +15 -5
  461. package/dist/dotnet/ManagedMetadataInventoryRows.js +20 -11
  462. package/dist/dotnet/ManagedMetadataLayout.js +10 -4
  463. package/dist/dotnet/ManagedMethodBodyReader.js +8 -3
  464. package/dist/dotnet/ManagedNativeBoundaryHelpers.js +3 -2
  465. package/dist/dotnet/ManagedNativeBoundaryInspector.js +49 -34
  466. package/dist/dotnet/ManagedPeReader.js +41 -25
  467. package/dist/dotnet/ManagedReaderFailure.js +2 -1
  468. package/dist/dotnet/ManagedStaticProvider.js +65 -31
  469. package/dist/dotnet/ManagedStaticProviderMetadata.js +1 -4
  470. package/dist/evaluation/AgentEvaluationReport.js +9 -5
  471. package/dist/evaluation/CodexAgentEval.js +43 -13
  472. package/dist/evm/EvmoleFailures.js +0 -2
  473. package/dist/evm/EvmoleInterfaceProvider.js +67 -2
  474. package/dist/filesystem/OwnedDirectoryHandle.js +29 -0
  475. package/dist/filesystem/OwnedFileHandle.js +36 -0
  476. package/dist/filesystem/RegularFile.js +73 -0
  477. package/dist/filesystem/StableFileHash.js +46 -0
  478. package/dist/filesystem/readFileHandleChunks.js +26 -0
  479. package/dist/firmware/FirmwareCommand.js +25 -3
  480. package/dist/firmware/FirmwareFiles.js +23 -8
  481. package/dist/firmware/FirmwareProvider.js +156 -32
  482. package/dist/firmware/FirmwarePublication.js +24 -3
  483. package/dist/firmware/FirmwareRelease.js +1 -0
  484. package/dist/generatedPackageMetadata.js +2 -2
  485. package/dist/ghidra/GhidraAnalysisProfile.js +55 -4
  486. package/dist/ghidra/GhidraAnalysisSeeds.js +211 -0
  487. package/dist/ghidra/GhidraClient.js +90 -8
  488. package/dist/ghidra/GhidraDiagnostics.js +11 -8
  489. package/dist/ghidra/GhidraFunctionValues.js +26 -2
  490. package/dist/ghidra/GhidraInstallation.js +111 -10
  491. package/dist/ghidra/GhidraInventoryValues.js +23 -1
  492. package/dist/ghidra/GhidraLanguageCatalog.js +99 -0
  493. package/dist/ghidra/GhidraLauncher.js +123 -58
  494. package/dist/ghidra/GhidraLoadImageAttest.js +49 -2
  495. package/dist/ghidra/GhidraMipsProfile.js +79 -0
  496. package/dist/ghidra/GhidraProvider.js +57 -9
  497. package/dist/ghidra/GhidraProviderCapabilities.js +18 -8
  498. package/dist/ghidra/GhidraProviderClient.js +282 -21
  499. package/dist/ghidra/GhidraSessionValues.js +9 -2
  500. package/dist/hopper/HopperAnalysisProfile.js +2 -0
  501. package/dist/hopper/HopperCleanup.js +1 -1
  502. package/dist/hopper/HopperClient.js +15 -6
  503. package/dist/hopper/HopperMachOImage.js +2 -0
  504. package/dist/hopper/HopperProvider.js +13 -2
  505. package/dist/ida/IdaOperationRunner.js +10 -2
  506. package/dist/ida/IdaProvider.js +7 -0
  507. package/dist/ida/IdaSessionClient.js +7 -3
  508. package/dist/ida/IdaWorkspace.js +4 -2
  509. package/dist/inspector/JavaScriptRuntimeScope.js +9 -5
  510. package/dist/inspector/V8InspectorCaptureProjection.js +46 -13
  511. package/dist/inspector/V8InspectorProvider.js +60 -8
  512. package/dist/javascript/analysis/JavaScriptAnalysisTransfer.js +326 -0
  513. package/dist/javascript/analysis/JavaScriptAnalysisWorker.js +520 -0
  514. package/dist/javascript/analysis/JavaScriptAnalysisWorkerProtocol.js +63 -0
  515. package/dist/javascript/analysis/JavaScriptAnalysisWorkerSchemas.js +521 -0
  516. package/dist/javascript/analysis/JavaScriptAnalysisWorkerServer.js +116 -0
  517. package/dist/javascript/recovery/RecoveryFiles.js +18 -7
  518. package/dist/javascript/recovery/WakaruCommand.js +22 -9
  519. package/dist/javascript/recovery/WakaruExecution.js +11 -7
  520. package/dist/javascript/recovery/WakaruProvider.js +139 -16
  521. package/dist/javascript/recovery/WakaruPublication.js +14 -4
  522. package/dist/javascript/recovery/WakaruRelease.js +10 -3
  523. package/dist/javascript/recovery/WakaruReport.js +12 -7
  524. package/dist/javascript/recovery/WakaruVersion.js +24 -0
  525. package/dist/javascript/sourceMaps/SourceMapCommand.js +16 -3
  526. package/dist/javascript/sourceMaps/SourceMapDecoder.js +63 -7
  527. package/dist/javascript/sourceMaps/SourceMapFormat.js +15 -4
  528. package/dist/jeb/JebMcpConnection.js +179 -0
  529. package/dist/jeb/JebMcpEndpoint.js +40 -0
  530. package/dist/jeb/JebProvider.js +299 -0
  531. package/dist/main/shutdown.js +76 -32
  532. package/dist/main/transport.js +1 -1
  533. package/dist/mcpDoctor.js +15 -6
  534. package/dist/native/AppleDispatchCoverage.js +25 -12
  535. package/dist/native/AppleDispatchMetadata.js +14 -7
  536. package/dist/native/AppleMachoFixups.js +71 -15
  537. package/dist/native/AppleMachoSelection.js +23 -3
  538. package/dist/native/AppleObjcDispatchFacets.js +3 -3
  539. package/dist/native/AppleObjcProperties.js +17 -7
  540. package/dist/native/LldbCallTracer.js +241 -75
  541. package/dist/native/NativeMacOSProvider.js +100 -20
  542. package/dist/native/NativeMacOSProviderMetadata.js +1 -2
  543. package/dist/native/NativeMachoInspection.js +11 -7
  544. package/dist/native/NativeUiHelperRuntime.js +6 -1
  545. package/dist/native/NativeUiObservation.js +4 -3
  546. package/dist/native/pe/PeResourceLayout.js +120 -0
  547. package/dist/native/pe/PeResourceParser.js +286 -0
  548. package/dist/native/pe/PeResourcesProvider.js +63 -0
  549. package/dist/process/BoundedFileBytes.js +30 -7
  550. package/dist/process/DarwinProcessRunTokenReader.js +8 -3
  551. package/dist/process/OwnedCommand.js +4 -3
  552. package/dist/process/ProcessOwnership.js +104 -112
  553. package/dist/process/ProcessOwnershipObservation.js +104 -51
  554. package/dist/process/ProcessOwnershipProcessTree.js +4 -4
  555. package/dist/process/ProcessRunTokenObservations.js +48 -0
  556. package/dist/process/ProviderDiagnosticRedaction.js +17 -0
  557. package/dist/process/ProviderProcess.js +4 -3
  558. package/dist/process/capture/FilesystemSnapshot.js +116 -22
  559. package/dist/process/capture/ProcessCaptureLifecycle.js +363 -86
  560. package/dist/process/capture/ProcessCaptureProgress.js +62 -0
  561. package/dist/process/capture/ProcessFilesystemEffects.js +19 -4
  562. package/dist/process/capture/ProcessHarness.js +202 -47
  563. package/dist/process/capture/ProcessNormalization.js +3 -1
  564. package/dist/process/capture/ProcessScenarioRuntimeValidation.js +5 -2
  565. package/dist/process/capture/TerminalRenderer.js +24 -7
  566. package/dist/reference/ReferenceSourceReader.js +22 -5
  567. package/dist/reference/ReferenceSourceReaderEntries.js +114 -51
  568. package/dist/reference/ReferenceSourceReaderErrors.js +12 -0
  569. package/dist/reference/ReferenceSourceReaderFile.js +50 -10
  570. package/dist/reference/ReferenceSourceReaderValidate.js +4 -4
  571. package/dist/server/EvidenceMcpServer.js +36 -1
  572. package/dist/server/admittedToolOperation.js +9 -0
  573. package/dist/server/analysisAdmission.js +8 -0
  574. package/dist/server/contractToolHandler.js +21 -0
  575. package/dist/server/createServer.js +118 -47
  576. package/dist/server/registerAdbTools.js +36 -0
  577. package/dist/server/registerAnalysisViewTool.js +4 -9
  578. package/dist/server/registerAndroidTools.js +3 -12
  579. package/dist/server/registerApktoolTools.js +14 -0
  580. package/dist/server/registerApplicationTools/compareExportShapes.js +6 -7
  581. package/dist/server/registerApplicationTools/compareSourceToBundle.js +4 -5
  582. package/dist/server/registerApplicationTools/compareVersions.js +3 -2
  583. package/dist/server/registerApplicationTools/coverage.js +3 -2
  584. package/dist/server/registerApplicationTools/helpers.js +3 -2
  585. package/dist/server/registerApplicationTools/obligationLedger.js +3 -2
  586. package/dist/server/registerApplicationTools/projectMobileApplicationGraph.js +3 -2
  587. package/dist/server/registerApplicationTools/traceFeature.js +3 -2
  588. package/dist/server/registerApplicationTools/traceSemantics.js +4 -5
  589. package/dist/server/registerArtifactComparisonTool.js +5 -2
  590. package/dist/server/registerArtifactTools.js +2 -2
  591. package/dist/server/registerBinaryDiagnosticsTools.js +16 -4
  592. package/dist/server/registerBrowserScenarioTool.js +10 -7
  593. package/dist/server/registerBrowserTools.js +12 -9
  594. package/dist/server/registerBundleComparisonTool.js +16 -2
  595. package/dist/server/registerCloseLifecycleTool.js +36 -5
  596. package/dist/server/registerElectronTools.js +28 -10
  597. package/dist/server/registerEnhancedTools.js +78 -73
  598. package/dist/server/registerEvidenceTools.js +54 -46
  599. package/dist/server/registerEvmTools.js +4 -9
  600. package/dist/server/registerFirmwareTools.js +3 -11
  601. package/dist/server/registerFunctionComparisonTool.js +5 -2
  602. package/dist/server/registerJavaScriptRecoveryTool.js +4 -9
  603. package/dist/server/registerJavaScriptRuntimeObservationTools.js +9 -6
  604. package/dist/server/registerJebTools.js +16 -0
  605. package/dist/server/registerManagedTools.js +7 -4
  606. package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +4 -6
  607. package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +3 -2
  608. package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +3 -2
  609. package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +3 -2
  610. package/dist/server/registerOfficialTools.js +31 -25
  611. package/dist/server/registerPeResourcesTool.js +9 -0
  612. package/dist/server/registerProcessComparisonTool.js +5 -2
  613. package/dist/server/registerRecordedCrashTools.js +4 -9
  614. package/dist/server/registerSessionRecordTools.js +2 -1
  615. package/dist/server/registerSessionTools.js +58 -21
  616. package/dist/server/registerWebModuleTool.js +4 -9
  617. package/dist/server/registerWebNetworkCaptureTool.js +4 -9
  618. package/dist/server/registerWebRuntimeTools.js +6 -5
  619. package/dist/server/registerWebScriptTool.js +6 -3
  620. package/dist/server/registerWebSourceLocationTool.js +4 -9
  621. package/dist/server/toolResult.js +21 -2
  622. package/dist/windows/WindowsPrivateRuntime.js +12 -5
  623. package/install.sh +7 -4
  624. package/licenses/nativeaot-parser-MIT.txt +28 -0
  625. package/native/windows/build/manifest.json +2 -2
  626. package/native/windows/build/rea-windows-x64.node +0 -0
  627. package/package.json +38 -7
  628. package/scripts/rea.mjs +16 -1
  629. package/skills/reverse-engineer-anything/SKILL.md +52 -51
  630. package/skills/reverse-engineer-anything/references/connection-and-recovery.md +127 -0
  631. package/skills/reverse-engineer-anything/references/evidence-workflows.md +8 -0
  632. package/skills/reverse-engineer-anything/references/javascript-applications.md +92 -13
  633. package/skills/reverse-engineer-anything/references/native-and-artifacts.md +31 -1
  634. package/dist/artifacts/inventory/policy.js +0 -2
  635. package/dist/domain/managed/managedApplicationGraphNodeCoverage.js +0 -6
  636. package/dist/server/registerNativeTools.js +0 -6
@@ -0,0 +1,253 @@
1
+ import * as t from "@babel/types";
2
+ import { unwrapJavaScriptExpression, semanticStaticPropertyKey, } from "./javascriptAstValues.js";
3
+ import { calleeName } from "./javascriptStaticAnalysisHelpers.js";
4
+ // tRPC proxies preserve router and procedure names as property names, so they
5
+ // survive identifier minification. Method names follow @trpc/react-query and
6
+ // @trpc/tanstack-react-query 11.19 documentation; cache-key helpers such as
7
+ // queryKey are excluded because they never issue a request.
8
+ const TRPC_HOOK_METHODS = new Set([
9
+ "useQuery",
10
+ "useSuspenseQuery",
11
+ "useInfiniteQuery",
12
+ "useSuspenseInfiniteQuery",
13
+ "usePrefetchQuery",
14
+ "usePrefetchInfiniteQuery",
15
+ "useMutation",
16
+ "useSubscription",
17
+ "queryOptions",
18
+ "infiniteQueryOptions",
19
+ "mutationOptions",
20
+ "subscriptionOptions",
21
+ ]);
22
+ // @trpc/client 11.19 clientCallTypeMap methods; common outside tRPC (Apollo,
23
+ // database pools, stores), so they need corroborating evidence.
24
+ const TRPC_REQUEST_METHODS = new Set(["query", "mutate"]);
25
+ // @trpc/client 11.19 TRPCSubscriptionObserver callbacks; RxJS observers use
26
+ // next/error/complete instead.
27
+ const TRPC_SUBSCRIPTION_CALLBACKS = new Set([
28
+ "onStarted",
29
+ "onData",
30
+ "onError",
31
+ "onStopped",
32
+ "onComplete",
33
+ "onConnectionStateChange",
34
+ ]);
35
+ // @trpc/client 11.19 client factories (createTRPCProxyClient is the
36
+ // deprecated alias of createTRPCClient).
37
+ const TRPC_CLIENT_FACTORIES = new Set([
38
+ "createTRPCClient",
39
+ "createTRPCProxyClient",
40
+ ]);
41
+ // Built-in HTTP links documented by tRPC 11.19 that carry a `url` option.
42
+ const TRPC_URL_LINKS = new Set([
43
+ "httpLink",
44
+ "httpBatchLink",
45
+ "httpBatchStreamLink",
46
+ "httpSubscriptionLink",
47
+ ]);
48
+ // Literals retained by @trpc/client 11.19 bundles (`this.name`, the default
49
+ // accept header key) or by the conventional transport path.
50
+ const TRPC_SOURCE_MARKERS = ["TRPCClientError", "trpc-accept", "/trpc"];
51
+ // Browser-owned roots whose methods share tRPC names, such as
52
+ // navigator.permissions.query.
53
+ const BROWSER_GLOBAL_NAMES = new Set([
54
+ "window",
55
+ "self",
56
+ "globalThis",
57
+ "document",
58
+ "navigator",
59
+ "location",
60
+ "history",
61
+ "console",
62
+ "performance",
63
+ "screen",
64
+ "top",
65
+ "parent",
66
+ "frames",
67
+ ]);
68
+ const PROCEDURE_SEGMENT = /^[A-Za-z_$][\w$]*$/u;
69
+ /** Read a static member path and the expression it starts from. */
70
+ const memberPath = (callee) => {
71
+ const reversed = [];
72
+ let current = callee;
73
+ while (t.isMemberExpression(current) ||
74
+ t.isOptionalMemberExpression(current)) {
75
+ const property = semanticStaticPropertyKey(current.property, current.computed);
76
+ if (property === null || !PROCEDURE_SEGMENT.test(property))
77
+ return undefined;
78
+ reversed.push(property);
79
+ current = current.object;
80
+ }
81
+ return { root: current, properties: reversed.reverse() };
82
+ };
83
+ const objectKeys = (node) => t.isObjectExpression(node)
84
+ ? node.properties.flatMap((property) => {
85
+ if (!t.isObjectProperty(property) && !t.isObjectMethod(property))
86
+ return [];
87
+ const key = semanticStaticPropertyKey(property.key, property.computed);
88
+ return key === null ? [] : [key];
89
+ })
90
+ : [];
91
+ const objectStringProperty = (node, key) => {
92
+ for (const property of node.properties)
93
+ if (t.isObjectProperty(property) &&
94
+ semanticStaticPropertyKey(property.key, property.computed) === key &&
95
+ t.isStringLiteral(property.value))
96
+ return property.value.value;
97
+ return undefined;
98
+ };
99
+ const objectProperty = (node, key) => {
100
+ for (const property of node.properties)
101
+ if (t.isObjectProperty(property) &&
102
+ semanticStaticPropertyKey(property.key, property.computed) === key)
103
+ return property.value;
104
+ return undefined;
105
+ };
106
+ const GRAPHQL_OPERATION_TYPES = new Set([
107
+ "query",
108
+ "mutation",
109
+ "subscription",
110
+ ]);
111
+ // A named GraphQL operation header (GraphQL October 2021, OperationDefinition):
112
+ // type, name, then variable definitions starting with `$`, a directive, or a
113
+ // selection set starting with a field name.
114
+ const GRAPHQL_OPERATION_HEADER = /^(query|mutation|subscription)[\s,]+([_A-Za-z][_0-9A-Za-z]*)[\s,]*(?:\([\s,]*\$|@[_A-Za-z]|\{[\s,]*[_A-Za-z])/u;
115
+ const isGraphqlIgnoredCharacter = (character) => character === "," || character === "" || /\s/u.test(character);
116
+ /** Recover a named operation from GraphQL document text. */
117
+ export const graphqlOperationFromText = (text) => {
118
+ // Skip GraphQL ignored tokens: whitespace, commas, BOM and # comments.
119
+ const limit = text.length;
120
+ let index = 0;
121
+ while (index < limit) {
122
+ const character = text.charAt(index);
123
+ if (isGraphqlIgnoredCharacter(character))
124
+ index += 1;
125
+ else if (character === "#") {
126
+ while (index < limit && !/[\n\r]/u.test(text.charAt(index)))
127
+ index += 1;
128
+ }
129
+ else
130
+ break;
131
+ }
132
+ if (index >= limit)
133
+ return undefined;
134
+ const header = GRAPHQL_OPERATION_HEADER.exec(text.slice(index));
135
+ const type = header?.[1];
136
+ const name = header?.[2];
137
+ return type === undefined || name === undefined
138
+ ? undefined
139
+ : { value: name, mechanism: `graphql:${type}` };
140
+ };
141
+ /** Recover a named operation from a precompiled GraphQL document object. */
142
+ export const graphqlOperationFromDocumentNode = (node) => {
143
+ if (objectStringProperty(node, "kind") !== "OperationDefinition")
144
+ return undefined;
145
+ const type = objectStringProperty(node, "operation");
146
+ if (type === undefined || !GRAPHQL_OPERATION_TYPES.has(type))
147
+ return undefined;
148
+ const name = objectProperty(node, "name");
149
+ if (!t.isObjectExpression(name) ||
150
+ objectStringProperty(name, "kind") !== "Name")
151
+ return undefined;
152
+ const value = objectStringProperty(name, "value");
153
+ return value === undefined
154
+ ? undefined
155
+ : { value, mechanism: `graphql:${type}` };
156
+ };
157
+ /** Bundlers use `(0, imported.factory)` to call an import without a receiver. */
158
+ const rpcFactoryName = (callee) => {
159
+ let current = unwrapJavaScriptExpression(callee).node;
160
+ while (t.isSequenceExpression(current)) {
161
+ const last = current.expressions.at(-1);
162
+ if (last === undefined)
163
+ return "";
164
+ current = unwrapJavaScriptExpression(last).node;
165
+ }
166
+ return calleeName(current);
167
+ };
168
+ /** Whether an initializer has the syntax of a documented tRPC client factory. */
169
+ export const isJavaScriptRpcClientFactory = (node) => {
170
+ const call = unwrapJavaScriptExpression(node).node;
171
+ return ((t.isCallExpression(call) || t.isOptionalCallExpression(call)) &&
172
+ TRPC_CLIENT_FACTORIES.has(rpcFactoryName(call.callee).split(".").pop() ?? ""));
173
+ };
174
+ /** Recover the literal `url` option passed to a documented tRPC HTTP link. */
175
+ const trpcLinkUrl = (node) => {
176
+ const name = rpcFactoryName(node.callee);
177
+ const factory = name.slice(name.lastIndexOf(".") + 1);
178
+ if (!TRPC_URL_LINKS.has(factory))
179
+ return undefined;
180
+ const options = node.arguments[0];
181
+ if (!t.isObjectExpression(options))
182
+ return undefined;
183
+ const url = objectStringProperty(options, "url");
184
+ return url === undefined
185
+ ? undefined
186
+ : { value: url, mechanism: `trpc:link:${factory}` };
187
+ };
188
+ /**
189
+ * Create the per-source scan. Hook and option-factory methods are distinctive.
190
+ * `query`/`mutate` need a root bound to a tRPC client factory, or a tRPC source
191
+ * marker with a router path of at least two segments; `subscribe` needs the
192
+ * marker and a tRPC observer argument. `this` roots, browser globals and RTK
193
+ * Query `endpoints` chains are never procedures.
194
+ */
195
+ export const createJavaScriptRpcScan = (source, clientRoots) => {
196
+ let marker;
197
+ const hasMarker = () => (marker ??= TRPC_SOURCE_MARKERS.some((value) => source.includes(value)));
198
+ // graphql-tag documents retain their source text in loc.source.body; that
199
+ // text repeats the OperationDefinition already recovered from the object.
200
+ const documentSourceBodies = new WeakSet();
201
+ const procedure = (node) => {
202
+ const path = memberPath(node.callee);
203
+ if (path === undefined || t.isThisExpression(path.root))
204
+ return undefined;
205
+ if (t.isIdentifier(path.root) && BROWSER_GLOBAL_NAMES.has(path.root.name))
206
+ return undefined;
207
+ const method = path.properties[path.properties.length - 1];
208
+ const segments = path.properties.slice(0, -1);
209
+ const first = segments[0];
210
+ if (method === undefined || first === undefined)
211
+ return undefined;
212
+ if (BROWSER_GLOBAL_NAMES.has(first) || segments.includes("endpoints"))
213
+ return undefined;
214
+ const bound = clientRoots.has(path.root);
215
+ const recognized = TRPC_HOOK_METHODS.has(method)
216
+ ? true
217
+ : TRPC_REQUEST_METHODS.has(method)
218
+ ? bound || (segments.length >= 2 && hasMarker())
219
+ : method === "subscribe" &&
220
+ (bound || hasMarker()) &&
221
+ objectKeys(node.arguments[1]).some((key) => TRPC_SUBSCRIPTION_CALLBACKS.has(key));
222
+ return recognized
223
+ ? { value: segments.join("."), mechanism: `trpc:procedure:${method}` }
224
+ : undefined;
225
+ };
226
+ return {
227
+ inspect: (node) => {
228
+ if (t.isCallExpression(node) || t.isOptionalCallExpression(node))
229
+ return trpcLinkUrl(node) ?? procedure(node);
230
+ if (t.isObjectExpression(node)) {
231
+ const body = objectProperty(node, "body");
232
+ if (t.isStringLiteral(body) &&
233
+ objectProperty(node, "locationOffset") !== undefined) {
234
+ documentSourceBodies.add(body);
235
+ return undefined;
236
+ }
237
+ return graphqlOperationFromDocumentNode(node);
238
+ }
239
+ if (t.isStringLiteral(node))
240
+ return documentSourceBodies.has(node)
241
+ ? undefined
242
+ : graphqlOperationFromText(node.value);
243
+ if (t.isTemplateLiteral(node)) {
244
+ // A template recovered without a cooked value stays dynamic.
245
+ const cooked = node.quasis[0]?.value.cooked;
246
+ return cooked === undefined || cooked === null
247
+ ? undefined
248
+ : graphqlOperationFromText(cooked);
249
+ }
250
+ return undefined;
251
+ },
252
+ };
253
+ };
@@ -25,7 +25,7 @@ const classifyLayer = (layer, runtimeEntities, matches, options) => {
25
25
  const layerComplete = options.reconciliationComplete &&
26
26
  layer.graph.coverage.status === "complete" &&
27
27
  scopedEntities.length > 0 &&
28
- scopedEntities.every(({ capture }) => captureScriptsComplete(capture.evidence.evidence_id, runtimeEntities));
28
+ scopedEntities.every(({ capture }) => capture.scriptsCompleteWithinScope);
29
29
  const states = nodes.map((node) => {
30
30
  const runtimeNodeIds = uniqueSorted(direct.get(node.node_id) ?? []);
31
31
  if (runtimeNodeIds.length > 0)
@@ -85,8 +85,6 @@ const append = (values, key, value) => {
85
85
  else
86
86
  current.push(value);
87
87
  };
88
- const captureScriptsComplete = (evidenceId, entities) => entities.find(({ capture }) => capture.evidence.evidence_id === evidenceId)
89
- ?.capture.scriptsCompleteWithinScope === true;
90
88
  const isLoadStateNode = (node) => node.kind === "javascript-asset" ||
91
89
  node.kind === "javascript-chunk" ||
92
90
  node.kind === "javascript-module";
@@ -16,7 +16,6 @@ export const javascriptRuntimeKindSchema = z.enum([
16
16
  "electron-renderer",
17
17
  ]);
18
18
  const observedJavaScriptRuntimeKindSchema = javascriptRuntimeKindSchema.or(z.literal("unknown"));
19
- /** Input for one bounded, attach-only V8 Inspector observation. */
20
19
  /** Input for one passive attach-only V8 Inspector observation. */
21
20
  export const observeJavaScriptRuntimeInputSchema = z.strictObject({
22
21
  ...runtimeEndpoint,
@@ -33,7 +32,6 @@ export const javascriptRuntimeLocationSchema = z.discriminatedUnion("kind", [
33
32
  z.strictObject({
34
33
  kind: z.literal("file"),
35
34
  file_path: z.string().min(1),
36
- authority: z.literal("scope-fallback").optional(),
37
35
  }),
38
36
  z.strictObject({
39
37
  kind: z.literal("url"),
@@ -48,8 +46,13 @@ export const javascriptRuntimeLocationSchema = z.discriminatedUnion("kind", [
48
46
  /** Discovery metadata can identify an endpoint target without verifying its file location. */
49
47
  export const javascriptRuntimeUnresolvedLocationSchema = z.strictObject({
50
48
  kind: z.literal("unresolved"),
51
- reported_url: z.string().min(1),
52
- reason: z.literal("unverifiable-file-location"),
49
+ reported_url: z
50
+ .string()
51
+ .describe("Raw Inspector URL, which may be empty for anonymous or evaluated code."),
52
+ reason: z.enum([
53
+ "unverifiable-file-location",
54
+ "location-authorization-not-attempted",
55
+ ]),
53
56
  });
54
57
  /** Verified locations and explicitly unresolved discovery metadata. */
55
58
  export const javascriptRuntimeTargetLocationSchema = z.union([
@@ -74,7 +77,7 @@ export const javascriptRuntimeTargetListSchema = z.strictObject({
74
77
  });
75
78
  const javascriptRuntimeScriptSchema = z.strictObject({
76
79
  script_key: prefixedDigestSchema("v8_script"),
77
- location: javascriptRuntimeLocationSchema,
80
+ location: javascriptRuntimeTargetLocationSchema,
78
81
  execution_context_key: z.string().nullable(),
79
82
  cdp_hash: z.string().nullable(),
80
83
  length: z
@@ -1,16 +1,22 @@
1
1
  import { classifyStaticLoadStates } from "./javascriptRuntimeLoadState.js";
2
2
  import { buildReconciledApplicationGraph } from "./javascriptRuntimeReconciliationGraph.js";
3
3
  import { reconcileRuntimeEntities } from "./javascriptRuntimeReconciliationMatching.js";
4
- import { parseRuntimeCaptures, parseStaticLayers, } from "./javascriptRuntimeReconciliationParsing.js";
4
+ import { parseStaticLayers, } from "./javascriptRuntimeReconciliationParsing.js";
5
+ import { parseRuntimeCaptures, } from "./javascriptRuntimeReconciliationCaptureParsing.js";
5
6
  import { createJavaScriptRuntimeReconciliationResult } from "./javascriptRuntimeReconciliationResult.js";
6
- import { reconcileJavaScriptRuntimeInputSchema } from "./javascriptRuntimeReconciliationSchemas.js";
7
7
  import { projectRuntimeCaptures } from "./javascriptRuntimeReconciliationRuntime.js";
8
8
  import { collectStaticRuntimeCandidates } from "./javascriptRuntimeStaticCandidates.js";
9
+ /** Parse caller Evidence once into the owner consumed by reconciliation. */
10
+ export const parseRuntimeReconciliationInput = (input) => ({
11
+ input,
12
+ layers: parseStaticLayers(input.static_layers, ["static_layers"]),
13
+ captures: parseRuntimeCaptures(input.runtime_observations, [
14
+ "runtime_observations",
15
+ ]),
16
+ });
9
17
  /** Reconcile static JAG layers with authorized passive CDP Evidence. */
10
- export const reconcileJavaScriptRuntime = (input) => {
11
- const parsed = reconcileJavaScriptRuntimeInputSchema.parse(input);
12
- const layers = parseStaticLayers(parsed.static_layers);
13
- const captures = parseRuntimeCaptures(parsed.runtime_observations);
18
+ export const reconcileJavaScriptRuntime = (parsed) => {
19
+ const { layers, captures } = parsed;
14
20
  const runtime = projectRuntimeCaptures(captures);
15
21
  const candidates = collectStaticRuntimeCandidates(layers);
16
22
  const matching = reconcileRuntimeEntities({
@@ -1,28 +1,29 @@
1
1
  import { isAbsolute } from "node:path";
2
- import { canonicalDigest } from "../comparisonSemantics.js";
2
+ import { digestCanonicalValue } from "../canonicalDigest.js";
3
3
  import { isPathWithinRoot } from "../localPath.js";
4
4
  import { z } from "zod";
5
+ import { invalidInput, parseAtPath, } from "./javascriptRuntimeReconciliationInputValidation.js";
5
6
  import { classifyBrowserCompleteness, } from "../browserCompleteness.js";
6
7
  import { electronActiveObservationResultSchema, } from "./electronActiveObservation.js";
7
8
  /** Parse active Electron Evidence as a bounded, target-only runtime capture. */
8
9
  export const parseActiveElectronCapture = (evidence) => {
9
10
  assertIdentity(evidence);
10
- const result = electronActiveObservationResultSchema.parse(evidence.normalized_result);
11
- const parameters = z
11
+ const result = parseAtPath((value) => electronActiveObservationResultSchema.parse(value), evidence.normalized_result, ["normalized_result"]);
12
+ const parameters = parseAtPath((value) => z
12
13
  .object({
13
14
  application_path: absolutePathSchema,
14
15
  application_root: absolutePathSchema,
15
16
  })
16
17
  .passthrough()
17
- .parse(evidence.parameters);
18
+ .parse(value), evidence.parameters, ["parameters"]);
18
19
  if (result.application.application_path !== parameters.application_path ||
19
20
  !isPathWithinRoot(parameters.application_root, result.application.application_path))
20
- throw new TypeError("Active Electron Evidence application path disagrees with its configured root");
21
+ throw invalidInput(["normalized_result", "application", "application_path"], "Active Electron Evidence application path disagrees with its configured root");
21
22
  return {
22
23
  kind: "electron-active",
23
24
  evidence,
24
25
  inspection: normalizeInspection(result),
25
- captureSha256: canonicalDigest(result, "Runtime reconciliation"),
26
+ captureSha256: digestCanonicalValue(result, "Runtime reconciliation"),
26
27
  scriptsCompleteWithinScope: false,
27
28
  };
28
29
  };
@@ -36,11 +37,11 @@ const assertIdentity = (evidence) => {
36
37
  evidence.provider.version !== "1" ||
37
38
  evidence.authority !== "controlled-replay" ||
38
39
  evidence.confidence !== "observed")
39
- throw new TypeError("Evidence does not match the supported capture_electron_scenario contract");
40
+ throw invalidInput([], "Evidence does not match the supported capture_electron_scenario contract");
40
41
  };
41
42
  const normalizeInspection = (result) => ({
42
43
  target: {
43
- target_id: `electron-active:${canonicalDigest(result.application.application_path, "Runtime reconciliation").slice(0, 32)}`,
44
+ target_id: `electron-active:${digestCanonicalValue(result.application.application_path, "Runtime reconciliation").slice(0, 32)}`,
44
45
  type: "electron-application",
45
46
  title: result.application.application_path,
46
47
  attached: true,
@@ -0,0 +1,212 @@
1
+ import { z } from "zod";
2
+ import { browserAllowedOriginsSchema, browserEndpointSchema, } from "../browserObservation.js";
3
+ import { webPageInspectionSchema, } from "../browserObservationSchemas.js";
4
+ import { classifyBrowserCompleteness, } from "../browserCompleteness.js";
5
+ import { electronPageInspectionSchema, } from "./electronObservation.js";
6
+ import { javascriptRuntimeObservationSchema, javascriptRuntimeKindSchema, } from "./javascriptRuntimeObservation.js";
7
+ import { digestCanonicalValue } from "../canonicalDigest.js";
8
+ import { compareUnicodeCodePoints } from "../unicodeCodePointOrder.js";
9
+ import { parseEvidence } from "../evidence.js";
10
+ import { parseActiveElectronCapture } from "./javascriptRuntimeReconciliationActive.js";
11
+ import { assertEvidenceIdentity, invalidInput, parseAtPath, } from "./javascriptRuntimeReconciliationInputValidation.js";
12
+ /** Parse only supported passive web/Electron inspection Evidence. */
13
+ export const parseRuntimeCaptures = (observations, path = ["runtime_observations"]) => observations
14
+ .map((observation, index) => parseRuntimeCapture(observation, [...path, index]))
15
+ .sort((left, right) => compareUnicodeCodePoints(left.evidence.evidence_id, right.evidence.evidence_id));
16
+ const parseRuntimeCapture = (input, evidencePath) => {
17
+ const evidence = parseAtPath(parseEvidence, input, evidencePath);
18
+ if (evidence.operation === "inspect_web_page")
19
+ return parseBrowserCapture(evidence, evidencePath);
20
+ if (evidence.operation === "inspect_electron_page")
21
+ return parseElectronCapture(evidence, evidencePath);
22
+ if (evidence.operation === "observe_javascript_runtime")
23
+ return parseV8Capture(evidence, evidencePath);
24
+ if (evidence.operation === "capture_electron_scenario") {
25
+ return parseAtPath(() => parseActiveElectronCapture(evidence), evidence, evidencePath);
26
+ }
27
+ throw invalidInput(evidencePath, "Runtime reconciliation requires inspect_web_page, inspect_electron_page, observe_javascript_runtime, or capture_electron_scenario Evidence");
28
+ };
29
+ const parseBrowserCapture = (evidence, path) => {
30
+ assertEvidenceIdentity(evidence, {
31
+ operation: "inspect_web_page",
32
+ predicate: "rea.web-page-inspection",
33
+ providerId: "rea-cdp-browser",
34
+ providerName: "REA Chrome DevTools Protocol observation provider",
35
+ providerVersion: "2",
36
+ authority: "external-service",
37
+ confidence: "observed",
38
+ }, path);
39
+ const inspection = parseAtPath((value) => webPageInspectionSchema.parse(value), evidence.normalized_result, [...path, "normalized_result"]);
40
+ assertRuntimeParameters(evidence, {
41
+ kind: "browser",
42
+ targetId: inspection.target.target_id,
43
+ targetOrigin: inspection.target.origin,
44
+ sourceIncluded: inspection.scripts.items.some(({ source }) => source.included),
45
+ }, path);
46
+ return {
47
+ kind: "browser",
48
+ evidence,
49
+ inspection,
50
+ captureSha256: digestCanonicalValue(inspection, "Runtime reconciliation"),
51
+ scriptsCompleteWithinScope: scriptsComplete(inspection.completeness),
52
+ };
53
+ };
54
+ const parseElectronCapture = (evidence, path) => {
55
+ assertEvidenceIdentity(evidence, {
56
+ operation: "inspect_electron_page",
57
+ predicate: "rea.electron-page-inspection",
58
+ providerId: "rea-cdp-electron",
59
+ providerName: "REA Electron file-page CDP observation provider",
60
+ providerVersion: "1",
61
+ authority: "external-service",
62
+ confidence: "observed",
63
+ }, path);
64
+ const inspection = parseAtPath((value) => electronPageInspectionSchema.parse(value), evidence.normalized_result, [...path, "normalized_result"]);
65
+ assertRuntimeParameters(evidence, {
66
+ kind: "electron",
67
+ targetId: inspection.target.target_id,
68
+ sourceIncluded: inspection.scripts.items.some(({ source }) => source.included),
69
+ }, path);
70
+ return {
71
+ kind: "electron",
72
+ evidence,
73
+ inspection,
74
+ captureSha256: digestCanonicalValue(inspection, "Runtime reconciliation"),
75
+ scriptsCompleteWithinScope: scriptsComplete(inspection.completeness),
76
+ };
77
+ };
78
+ const parseV8Capture = (evidence, path) => {
79
+ assertEvidenceIdentity(evidence, {
80
+ operation: "observe_javascript_runtime",
81
+ predicate: "rea.javascript-runtime-observation",
82
+ providerId: "rea-v8-inspector",
83
+ providerName: "REA passive Node/Electron V8 Inspector provider",
84
+ providerVersion: "1",
85
+ authority: "external-service",
86
+ confidence: "observed",
87
+ }, path);
88
+ const result = parseAtPath((value) => javascriptRuntimeObservationSchema.parse(value), evidence.normalized_result, [...path, "normalized_result"]);
89
+ assertV8RuntimeParameters(evidence, result, path);
90
+ return {
91
+ kind: "v8-inspector",
92
+ evidence,
93
+ inspection: normalizeV8Inspection(result),
94
+ captureSha256: digestCanonicalValue(result, "Runtime reconciliation"),
95
+ scriptsCompleteWithinScope: false,
96
+ };
97
+ };
98
+ const assertV8RuntimeParameters = (evidence, result, path) => {
99
+ const parameters = parseAtPath((value) => z
100
+ .object({
101
+ inspector_endpoint: browserEndpointSchema,
102
+ target_id: z.string().trim().min(1),
103
+ runtime_kind: javascriptRuntimeKindSchema.optional(),
104
+ })
105
+ .passthrough()
106
+ .parse(value), evidence.parameters, [...path, "parameters"]);
107
+ if (parameters.target_id !== result.target.target_id ||
108
+ (parameters.runtime_kind !== undefined &&
109
+ parameters.runtime_kind !== result.target.runtime_kind))
110
+ throw invalidInput([...path, "parameters", "target_id"], "Runtime Evidence target or declared role disagrees with its result");
111
+ if (result.target.location.kind === "builtin" &&
112
+ !result.target.location.specifier.startsWith("node:"))
113
+ throw invalidInput([...path, "normalized_result", "target", "location"], "Runtime Evidence contains an invalid builtin location");
114
+ for (const [index, { location }] of result.scripts.items.entries())
115
+ if (location.kind === "builtin" && !location.specifier.startsWith("node:"))
116
+ throw invalidInput([...path, "normalized_result", "scripts", "items", index, "location"], "Runtime Evidence contains an invalid builtin location");
117
+ };
118
+ const normalizeV8Inspection = (result) => ({
119
+ target: {
120
+ target_id: result.target.target_id,
121
+ type: result.target.protocol_type,
122
+ title: result.target.runtime_kind,
123
+ attached: result.target.attached,
124
+ ...(result.target.location.kind === "unresolved"
125
+ ? { unresolved_location: result.target.location }
126
+ : runtimeLocation(result.target.location)),
127
+ },
128
+ frames: [],
129
+ scripts: {
130
+ items: result.scripts.items.map((script) => ({
131
+ script_key: script.script_key,
132
+ frame_id: script.execution_context_key,
133
+ ...runtimeLocation(script.location),
134
+ cdp_hash: script.cdp_hash,
135
+ length: script.length,
136
+ is_module: script.is_module,
137
+ language: null,
138
+ source: {
139
+ included: false,
140
+ reason: "V8 Inspector source capture is outside passive authority.",
141
+ },
142
+ })),
143
+ },
144
+ workers: [],
145
+ completeness: classifyBrowserCompleteness({
146
+ policyFilteredSections: new Set(excludedV8Scripts(result) > 0 ? ["scripts"] : []),
147
+ attachLimitedSections: new Set([
148
+ "frames",
149
+ "scripts",
150
+ "script_sources",
151
+ "workers",
152
+ ]),
153
+ truncatedSections: new Set(result.capture.truncated ? ["scripts"] : []),
154
+ unavailableSections: new Set(["frames", "script_sources", "workers"]),
155
+ excluded: excludedV8Scripts(result) === 0
156
+ ? []
157
+ : [
158
+ {
159
+ section: "scripts",
160
+ reason: "out_of_target_scope",
161
+ count: excludedV8Scripts(result),
162
+ },
163
+ ],
164
+ droppedEvents: {
165
+ scripts: result.capture.events_dropped,
166
+ network_requests: 0,
167
+ console_events: 0,
168
+ websocket_connections: 0,
169
+ websocket_frames: 0,
170
+ webmcp_tools: 0,
171
+ timeline_events: 0,
172
+ },
173
+ }),
174
+ });
175
+ const runtimeLocation = (location) => {
176
+ if (location.kind === "unresolved")
177
+ return { unresolved_location: location };
178
+ if (location.kind === "file")
179
+ return { file_path: location.file_path };
180
+ if (location.kind === "url")
181
+ return { url: location.sanitized_url };
182
+ return { url: location.specifier };
183
+ };
184
+ const excludedV8Scripts = (result) => Object.values(result.scripts.excluded).reduce((total, count) => total + count, 0);
185
+ const assertRuntimeParameters = (evidence, expected, path) => {
186
+ const common = {
187
+ target_id: z.string().trim().min(1),
188
+ cdp_endpoint: browserEndpointSchema,
189
+ include_script_sources: z.boolean(),
190
+ };
191
+ if (expected.kind === "browser") {
192
+ const parameters = parseAtPath((value) => z
193
+ .object({ ...common, allowed_origins: browserAllowedOriginsSchema })
194
+ .passthrough()
195
+ .parse(value), evidence.parameters, [...path, "parameters"]);
196
+ if (parameters.target_id !== expected.targetId)
197
+ throw invalidInput([...path, "parameters", "target_id"], "Runtime Evidence target disagrees with its captured result");
198
+ if (!parameters.allowed_origins.includes(expected.targetOrigin))
199
+ throw invalidInput([...path, "parameters", "allowed_origins"], "Browser Evidence target is outside its recorded origin scope");
200
+ if (expected.sourceIncluded && !parameters.include_script_sources)
201
+ throw invalidInput([...path, "parameters", "include_script_sources"], "Runtime Evidence contains source without source-capture selection");
202
+ return;
203
+ }
204
+ const parameters = parseAtPath((value) => z.object(common).passthrough().parse(value), evidence.parameters, [...path, "parameters"]);
205
+ if (parameters.target_id !== expected.targetId)
206
+ throw invalidInput([...path, "parameters", "target_id"], "Runtime Evidence target disagrees with its captured result");
207
+ if (expected.sourceIncluded && !parameters.include_script_sources)
208
+ throw invalidInput([...path, "parameters", "include_script_sources"], "Runtime Evidence contains source without source-capture selection");
209
+ };
210
+ const scriptsComplete = (completeness) => !completeness.truncated_sections.includes("scripts") &&
211
+ !completeness.unavailable_sections.includes("scripts") &&
212
+ completeness.dropped_events.scripts === 0;
@@ -1,5 +1,6 @@
1
1
  import { createJavaScriptApplicationGraph, createJavaScriptApplicationNode, } from "./javascriptApplicationGraph.js";
2
- import { compareCodePoints, uniqueSorted } from "../canonicalOrdering.js";
2
+ import { uniqueSorted } from "../canonicalOrdering.js";
3
+ import { compareUnicodeCodePoints } from "../unicodeCodePointOrder.js";
3
4
  /** Merge source graphs, runtime nodes, and inferred mappings into one valid JAG. */
4
5
  export const buildReconciledApplicationGraph = (input) => {
5
6
  const merged = mergeNodes([
@@ -44,11 +45,11 @@ export const buildReconciledApplicationGraph = (input) => {
44
45
  const boundGraphContent = (input, nodes, edges) => {
45
46
  const allRoots = preferredRootIds(input);
46
47
  const rootNodeIds = allRoots;
47
- const sortedNodes = [...nodes].sort((left, right) => compareCodePoints(left.node_id, right.node_id));
48
+ const sortedNodes = [...nodes].sort((left, right) => compareUnicodeCodePoints(left.node_id, right.node_id));
48
49
  const retainedNodes = sortedNodes;
49
50
  const retainedIds = new Set(retainedNodes.map(({ node_id: id }) => id));
50
51
  const retainedEdges = [...edges]
51
- .sort((left, right) => compareCodePoints(left.edge_id, right.edge_id))
52
+ .sort((left, right) => compareUnicodeCodePoints(left.edge_id, right.edge_id))
52
53
  .filter(({ source_node_id: source, target_node_id: target }) => retainedIds.has(source) && retainedIds.has(target));
53
54
  return {
54
55
  rootNodeIds,
@@ -130,8 +131,13 @@ const graphCoverage = (input, facts, nodeCount) => facts.inputStatus === "comple
130
131
  };
131
132
  const mergeNodes = (nodes) => {
132
133
  const grouped = new Map();
133
- for (const node of nodes)
134
- grouped.set(node.node_id, [...(grouped.get(node.node_id) ?? []), node]);
134
+ for (const node of nodes) {
135
+ const group = grouped.get(node.node_id);
136
+ if (group === undefined)
137
+ grouped.set(node.node_id, [node]);
138
+ else
139
+ group.push(node);
140
+ }
135
141
  const merged = [...grouped.values()].map((group) => {
136
142
  const first = group[0];
137
143
  if (first === undefined)
@@ -143,7 +149,7 @@ const mergeNodes = (nodes) => {
143
149
  ...new Map(group
144
150
  .flatMap(({ observations: values }) => values)
145
151
  .map((observation) => [observation.observation_id, observation])).values(),
146
- ].sort((left, right) => compareCodePoints(left.observation_id, right.observation_id));
152
+ ].sort((left, right) => compareUnicodeCodePoints(left.observation_id, right.observation_id));
147
153
  return createJavaScriptApplicationNode({
148
154
  kind: first.kind,
149
155
  identity: first.identity,