rea-agents 6.1.0 → 6.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (573) hide show
  1. package/README.md +24 -24
  2. package/bridge/ghidra/ReaGhidraBridge.java +32 -4
  3. package/bridge/hopper_bridge.py +8 -1
  4. package/dist/android/JadxConfiguration.js +87 -7
  5. package/dist/android/JadxMcpTransport.js +14 -2
  6. package/dist/android/JadxProvider.js +64 -36
  7. package/dist/android/JadxSession.js +51 -9
  8. package/dist/application/BinaryTargetResolver.js +68 -20
  9. package/dist/application/BrowserEvidence.js +3 -8
  10. package/dist/application/BrowserScenarioEvidence.js +4 -20
  11. package/dist/application/CapabilityInventory.js +43 -9
  12. package/dist/application/ClientConfigurationDocument.js +97 -25
  13. package/dist/application/ClientRegistrationStatus.js +19 -6
  14. package/dist/application/DirectAnalysis.js +41 -20
  15. package/dist/application/DirectAnalysisCleanup.js +71 -0
  16. package/dist/application/DirectAnalysisStatus.js +3 -7
  17. package/dist/application/Doctor.js +40 -53
  18. package/dist/application/DoctorDiagnostics.js +2 -3
  19. package/dist/application/EnhancedTools.js +51 -6
  20. package/dist/application/EvidenceBundleFiles.js +8 -3
  21. package/dist/application/InvestigationProviders.js +13 -5
  22. package/dist/application/JsonFiles.js +56 -23
  23. package/dist/application/LinuxHopper.js +11 -7
  24. package/dist/application/MacHopper.js +15 -18
  25. package/dist/application/RealHopperAssertions.js +0 -11
  26. package/dist/application/ReconstructionObligationCandidates.js +10 -3
  27. package/dist/application/ReconstructionObligationLedgerProjection.js +3 -1
  28. package/dist/application/ReferenceSourceImportEntries.js +1 -1
  29. package/dist/application/RegularFileRead.js +17 -0
  30. package/dist/application/Setup.js +26 -23
  31. package/dist/application/SetupClientConfiguration.js +18 -7
  32. package/dist/application/SetupHost.js +20 -29
  33. package/dist/application/SetupPlan.js +24 -20
  34. package/dist/application/SetupSkill.js +57 -8
  35. package/dist/application/SupportedClients.js +43 -0
  36. package/dist/application/Uninstall.js +98 -30
  37. package/dist/application/UpdateMaintenance.js +13 -7
  38. package/dist/application/UpdateRuntime.js +12 -12
  39. package/dist/application/Utf8JsonInput.js +64 -0
  40. package/dist/application/WebScriptExportService.js +38 -5
  41. package/dist/application/WorkflowEvidence.js +25 -2
  42. package/dist/application/XrefsAddressResolution.js +45 -0
  43. package/dist/application/analysisView/AnalysisViewService.js +76 -0
  44. package/dist/application/android/AndroidAnalysisService.js +1 -1
  45. package/dist/application/binary/AnalysisClientCleanup.js +30 -5
  46. package/dist/application/binary/AnalysisProviderEvaluation.js +1 -2
  47. package/dist/application/binary/AnalysisProviderRegistry.js +2 -6
  48. package/dist/application/binary/AnalysisSnapshotCache.js +13 -10
  49. package/dist/application/binary/BinarySession.js +86 -29
  50. package/dist/application/binary/BinarySessionComposition.js +1 -3
  51. package/dist/application/binary/BinarySessionExecution.js +3 -5
  52. package/dist/application/binary/BinarySessionOpen.js +10 -2
  53. package/dist/application/binary/BinarySessionRecords.js +1 -1
  54. package/dist/application/binary/BinarySessionStatus.js +1 -6
  55. package/dist/application/binary/CompositeProvider.js +4 -18
  56. package/dist/application/binary/LazyAnalysisProvider.js +5 -5
  57. package/dist/application/binary/SessionProviderRouter.js +27 -135
  58. package/dist/application/homebrew.js +48 -0
  59. package/dist/application/javascript/ElectronActiveEvidence.js +10 -14
  60. package/dist/application/javascript/ElectronBoundaryAnalysis.js +2 -2
  61. package/dist/application/javascript/ElectronBoundaryGraphNative.js +5 -1
  62. package/dist/application/javascript/JavaScriptApplicationEvidence.js +3 -6
  63. package/dist/application/javascript/JavaScriptApplicationEvidenceGraph.js +107 -46
  64. package/dist/application/javascript/JavaScriptApplicationService.js +7 -1
  65. package/dist/application/javascript/JavaScriptApplicationWorkflowService.js +59 -45
  66. package/dist/application/javascript/JavaScriptArtifactAnalysis.js +5 -9
  67. package/dist/application/javascript/JavaScriptArtifactGraphBuilder.js +19 -27
  68. package/dist/application/javascript/JavaScriptArtifactGraphBundlers.js +11 -3
  69. package/dist/application/javascript/JavaScriptArtifactGraphContext.js +9 -0
  70. package/dist/application/javascript/JavaScriptArtifactGraphDocuments.js +8 -5
  71. package/dist/application/javascript/JavaScriptArtifactGraphFindings.js +46 -29
  72. package/dist/application/javascript/JavaScriptArtifactGraphStructure.js +0 -1
  73. package/dist/application/javascript/JavaScriptArtifactPathResolution.js +86 -27
  74. package/dist/application/javascript/JavaScriptArtifactReconstruction.js +52 -9
  75. package/dist/application/javascript/JavaScriptArtifactReconstructionInput.js +1 -0
  76. package/dist/application/javascript/JavaScriptJsonModules.js +2 -2
  77. package/dist/application/javascript/JavaScriptModuleRelationships.js +6 -18
  78. package/dist/application/javascript/JavaScriptRuntimeObservationService.js +3 -3
  79. package/dist/application/javascript/JavaScriptRuntimeReconciliationService.js +11 -27
  80. package/dist/application/javascript/JavaScriptSemanticGraphAsyncProjection.js +4 -5
  81. package/dist/application/javascript/JavaScriptSemanticGraphBuilder.js +8 -6
  82. package/dist/application/javascript/JavaScriptSemanticGraphChildProcessProjection.js +2 -3
  83. package/dist/application/javascript/JavaScriptSemanticGraphConstruction.js +7 -5
  84. package/dist/application/javascript/JavaScriptSemanticGraphDataProjection.js +3 -4
  85. package/dist/application/javascript/JavaScriptSemanticGraphEvidence.js +1 -1
  86. package/dist/application/javascript/JavaScriptSemanticGraphFingerprintProjection.js +2 -2
  87. package/dist/application/javascript/JavaScriptSemanticGraphFlowProjection.js +3 -7
  88. package/dist/application/javascript/JavaScriptSemanticGraphObjectProjection.js +76 -47
  89. package/dist/application/javascript/JavaScriptSemanticGraphProjection.js +4 -4
  90. package/dist/application/javascript/JavaScriptSemanticGraphResourceProjection.js +3 -4
  91. package/dist/application/javascript/JavaScriptSemanticGraphValueProjection.js +51 -25
  92. package/dist/application/javascript/JavaScriptSemanticTraceService.js +15 -10
  93. package/dist/application/managed/ManagedMemberComparisonService.js +2 -1
  94. package/dist/application/managed/ManagedNativeVerificationService.js +2 -1
  95. package/dist/application/native/NativeCallRoutes.js +2 -4
  96. package/dist/application/process/ProcessCli.js +11 -11
  97. package/dist/application/process/ProcessEvidence.js +0 -1
  98. package/dist/artifacts/ArtifactProvider.js +53 -30
  99. package/dist/artifacts/ArtifactProviderMetadata.js +1 -4
  100. package/dist/artifacts/ArtifactReader.js +31 -0
  101. package/dist/artifacts/AsarArtifactReader.js +81 -17
  102. package/dist/artifacts/DirectoryArtifactReader.js +2 -1
  103. package/dist/artifacts/MachOSliceArtifactReader.js +9 -2
  104. package/dist/artifacts/NativeDmgArtifactReader.js +207 -77
  105. package/dist/artifacts/NativeDmgOwnership.js +109 -0
  106. package/dist/artifacts/SafeOutputTree.js +16 -2
  107. package/dist/artifacts/ZipArtifactReader.js +11 -4
  108. package/dist/artifacts/apple/AppleAssetCatalogAnalysis.js +4 -2
  109. package/dist/artifacts/apple/DylibResolutionReader.js +17 -7
  110. package/dist/artifacts/apple/KeyedArchiveReader.js +68 -42
  111. package/dist/artifacts/apple/MachoLoadCommandReader.js +36 -6
  112. package/dist/artifacts/extraction/ArtifactExtraction.js +104 -29
  113. package/dist/artifacts/inventory/ArtifactGraphConstruction.js +71 -66
  114. package/dist/artifacts/inventory/ArtifactInventory.js +0 -1
  115. package/dist/artifacts/inventory/classify.js +33 -14
  116. package/dist/artifacts/inventory/hashStableRootArtifact.js +37 -0
  117. package/dist/artifacts/inventory/reader.js +3 -3
  118. package/dist/artifacts/inventory/scanCanonical.js +64 -34
  119. package/dist/artifacts/inventory/scanReader.js +12 -20
  120. package/dist/artifacts/javascript/JavaScriptArtifactFiles.js +65 -27
  121. package/dist/browser/BrowserScenarioPartialObservation.js +106 -0
  122. package/dist/browser/CdpBrowserProvider.js +6 -6
  123. package/dist/browser/CdpCaptureEventHandlers.js +2 -4
  124. package/dist/browser/CdpCaptureEvents.js +0 -1
  125. package/dist/browser/CdpCaptureStorageFingerprints.js +3 -3
  126. package/dist/browser/CdpCaptureValues.js +20 -0
  127. package/dist/browser/CdpElectronInspection.js +2 -2
  128. package/dist/browser/CdpElectronProvider.js +4 -5
  129. package/dist/browser/CdpElectronScriptEvents.js +2 -8
  130. package/dist/browser/CdpElectronScripts.js +4 -5
  131. package/dist/browser/CdpPageCaptureScripts.js +2 -3
  132. package/dist/browser/CdpSafeMetadata.js +10 -10
  133. package/dist/browser/CdpWebMcpDiscovery.js +16 -13
  134. package/dist/browser/PlaywrightBrowserScenarioProvider.js +64 -49
  135. package/dist/browser/PlaywrightElectronActiveActions.js +2 -56
  136. package/dist/browser/PlaywrightElectronActiveProvider.js +10 -6
  137. package/dist/browser/PlaywrightScenarioArtifacts.js +1 -1
  138. package/dist/browser/PlaywrightScenarioBrowser.js +269 -66
  139. package/dist/browser/PlaywrightScenarioEvents.js +1 -1
  140. package/dist/browser/PlaywrightScenarioSession.js +41 -32
  141. package/dist/browser/WebSourceMapFetcher.js +32 -6
  142. package/dist/browser/assets/ScenarioScriptCapture.js +8 -12
  143. package/dist/browser/assets/ScriptCaptureAdapters.js +1 -1
  144. package/dist/browser/history/CaptureFailures.js +6 -2
  145. package/dist/browser/history/MitmproxyCaptureAdapter.js +4 -2
  146. package/dist/catalogIdentity.js +0 -1
  147. package/dist/cli/analysisViewCommands.js +36 -0
  148. package/dist/cli/artifactCommands.js +11 -12
  149. package/dist/cli/coreAnalysisCommands.js +3 -3
  150. package/dist/cli/coreBinaryCommands.js +37 -28
  151. package/dist/cli/coreNativeCommands.js +9 -10
  152. package/dist/cli/electronCommands.js +12 -13
  153. package/dist/cli/interactiveSetup.js +6 -6
  154. package/dist/cli/javascriptApplicationAnalysis.js +2 -12
  155. package/dist/cli/jsonOutput.js +3 -2
  156. package/dist/cli/managedCommands.js +7 -8
  157. package/dist/cli/nativeCallCommands.js +1 -2
  158. package/dist/cli/omittableDefaults.js +50 -0
  159. package/dist/cli/processCommands.js +3 -2
  160. package/dist/cli/setupCommands.js +16 -15
  161. package/dist/cli/streamedJsonOutput.js +83 -4
  162. package/dist/cli/utilityCommands.js +10 -12
  163. package/dist/cli.js +19 -8
  164. package/dist/cliBrowserScenarioCommands.js +2 -2
  165. package/dist/cliCommandNames.js +1 -0
  166. package/dist/cliJsonFile.js +179 -0
  167. package/dist/cliJsonInput.js +60 -33
  168. package/dist/cliObservationOptions.js +4 -0
  169. package/dist/cliOutput.js +0 -38
  170. package/dist/composition/auxiliaryAnalysisProviders.js +30 -25
  171. package/dist/composition/binary.js +9 -9
  172. package/dist/composition/browserScenario.js +2 -1
  173. package/dist/composition/directAnalysis.js +20 -14
  174. package/dist/composition/electronScenario.js +1 -1
  175. package/dist/composition/optionalObservationProviders.js +12 -7
  176. package/dist/config/environment.js +6 -0
  177. package/dist/config/ghidraStartupTimeout.js +4 -9
  178. package/dist/config/homeDirectory.js +12 -0
  179. package/dist/config/mcpResponseBudget.js +9 -1
  180. package/dist/config/parseConfig.js +7 -3
  181. package/dist/config/parsers.js +19 -22
  182. package/dist/contracts/analysisViewToolContracts.js +56 -0
  183. package/dist/contracts/applicationToolContracts.js +5 -4
  184. package/dist/contracts/artifactComparisonExample.js +7 -7
  185. package/dist/contracts/artifactToolContracts.js +1 -1
  186. package/dist/contracts/browserScenarioToolContracts.js +1 -1
  187. package/dist/contracts/browserToolContracts.js +19 -15
  188. package/dist/contracts/enhancedInputs.js +2 -2
  189. package/dist/contracts/enhancedToolContracts.js +4 -3
  190. package/dist/contracts/errorSchemas.js +3 -1
  191. package/dist/contracts/evm/evmToolContracts.js +1 -1
  192. package/dist/contracts/functionComparisonExample.js +8 -0
  193. package/dist/contracts/functionWorkflowToolContracts.js +1 -1
  194. package/dist/contracts/inputSchemaPresentation.js +181 -0
  195. package/dist/contracts/investigationExamples.js +4 -3
  196. package/dist/contracts/javascript/electronToolContracts.js +3 -2
  197. package/dist/contracts/javascript/javascriptApplicationWorkflowExamples.js +3 -22
  198. package/dist/contracts/javascript/javascriptExportShapeComparisonExample.js +248 -0
  199. package/dist/contracts/javascript/javascriptRuntimeObservationToolContracts.js +1 -1
  200. package/dist/contracts/javascript/javascriptRuntimeReconciliationExample.js +8 -7
  201. package/dist/contracts/managed/managedToolContracts.js +8 -12
  202. package/dist/contracts/managed/managedWorkflowToolContracts.js +1 -1
  203. package/dist/contracts/mobileApplicationGraphExamples.js +8 -8
  204. package/dist/contracts/native/binaryDiagnosticsToolContracts.js +1 -1
  205. package/dist/contracts/native/nativeToolContracts.js +2 -2
  206. package/dist/contracts/officialToolContracts.js +2 -1
  207. package/dist/contracts/promptContracts.js +2 -2
  208. package/dist/contracts/providerSelection.js +1 -1
  209. package/dist/contracts/sessionLifecycleInputs.js +4 -3
  210. package/dist/contracts/sessionStatusContract.js +3 -2
  211. package/dist/contracts/sessionToolContracts.js +17 -4
  212. package/dist/contracts/sessionToolSchemas.js +4 -16
  213. package/dist/contracts/toolContracts.js +2 -0
  214. package/dist/contracts/toolEffects.js +1 -0
  215. package/dist/contracts/toolOutputSchemaGroups.js +138 -94
  216. package/dist/contracts/toolOutputSchemaPrimitives.js +13 -26
  217. package/dist/contracts/toolSchemaMetadata.js +18 -69
  218. package/dist/contracts/webNetworkCaptureToolContracts.js +1 -1
  219. package/dist/contracts/webRuntimeToolContracts.js +1 -1
  220. package/dist/contracts/webScriptToolContracts.js +1 -1
  221. package/dist/doctorRuntime.js +7 -5
  222. package/dist/domain/analysisErrorBase.js +5 -0
  223. package/dist/domain/analysisErrorCore.js +3 -0
  224. package/dist/domain/analysisErrorPresentation.js +22 -5
  225. package/dist/domain/analysisErrorProjection.js +24 -5
  226. package/dist/domain/analysisSnapshot.js +31 -31
  227. package/dist/domain/analysisView/analysisView.js +241 -0
  228. package/dist/domain/analysisView/analysisViewCoverage.js +19 -0
  229. package/dist/domain/analysisView/binaryLayoutView.js +159 -0
  230. package/dist/domain/analysisView/javascriptApplicationView.js +238 -0
  231. package/dist/domain/android/androidApplication.js +1 -1
  232. package/dist/domain/android/androidPartialObservation.js +36 -0
  233. package/dist/domain/apple/appleApplication.js +1 -1
  234. package/dist/domain/apple/dylibResolution.js +10 -3
  235. package/dist/domain/apple/interfaceBuilderGraph.js +0 -1
  236. package/dist/domain/apple/keyedArchive.js +26 -2
  237. package/dist/domain/artifactComparison.js +15 -6
  238. package/dist/domain/artifactGraph.js +17 -4
  239. package/dist/domain/artifactIdentity.js +8 -8
  240. package/dist/domain/artifactInspection.js +8 -8
  241. package/dist/domain/artifactInventoryEvidence.js +9 -16
  242. package/dist/domain/artifactOperationError.js +3 -3
  243. package/dist/domain/artifactPartialObservation.js +1 -0
  244. package/dist/domain/artifactPathSyntax.js +49 -0
  245. package/dist/domain/binaryTarget.js +39 -13
  246. package/dist/domain/browserCaptureComparison.js +13 -49
  247. package/dist/domain/browserCompleteness.js +3 -2
  248. package/dist/domain/browserNetworkEvidence.js +10 -4
  249. package/dist/domain/browserObservation.js +0 -1
  250. package/dist/domain/browserObservationSchemas.js +14 -3
  251. package/dist/domain/browserScenario.js +0 -1
  252. package/dist/domain/browserScenarioCapture.js +1 -2
  253. package/dist/domain/browserScenarioCaptureValues.js +2 -2
  254. package/dist/domain/browserScenarioDiff.js +0 -2
  255. package/dist/domain/browserScenarioDiffEvidence.js +0 -12
  256. package/dist/domain/browserScenarioDiffValues.js +2 -2
  257. package/dist/domain/browserScenarioNormalization.js +3 -3
  258. package/dist/domain/browserScenarioValues.js +6 -6
  259. package/dist/domain/callPath.js +15 -18
  260. package/dist/domain/callPathSchemas.js +2 -2
  261. package/dist/domain/canonicalDigest.js +7 -1
  262. package/dist/domain/canonicalOrdering.js +1 -13
  263. package/dist/domain/changedBehavior.js +5 -6
  264. package/dist/domain/comparisonSemantics.js +0 -5
  265. package/dist/domain/completionLedgerGeneration.js +2 -1
  266. package/dist/domain/configurationErrors.js +12 -0
  267. package/dist/domain/conformancePackage.js +4 -3
  268. package/dist/domain/digests.js +0 -3
  269. package/dist/domain/evidence.js +19 -40
  270. package/dist/domain/evidenceBundle.js +58 -42
  271. package/dist/domain/evidenceCompletionLedger.js +2 -1
  272. package/dist/domain/firmware/firmwareAnalysis.js +4 -3
  273. package/dist/domain/functionComparison.js +6 -6
  274. package/dist/domain/functionComparisonDimensions.js +120 -87
  275. package/dist/domain/functionComparisonNormalization.js +26 -36
  276. package/dist/domain/functionComparisonResults.js +3 -6
  277. package/dist/domain/functionComparisonSchemas.js +2 -8
  278. package/dist/domain/functionDossierEvidence.js +4 -38
  279. package/dist/domain/hopperValues.js +11 -15
  280. package/dist/domain/javascript/electronActiveObservation.js +29 -71
  281. package/dist/domain/javascript/electronObservation.js +14 -3
  282. package/dist/domain/javascript/electronStaticAnalysisBrowser.js +12 -11
  283. package/dist/domain/javascript/electronStaticAnalysisIpc.js +11 -2
  284. package/dist/domain/javascript/electronStaticAnalysisNative.js +7 -4
  285. package/dist/domain/javascript/electronStaticAnalysisValues.js +8 -4
  286. package/dist/domain/javascript/javascriptApplicationAnalysis.js +3 -1
  287. package/dist/domain/javascript/javascriptApplicationChangeGraph.js +12 -8
  288. package/dist/domain/javascript/javascriptApplicationEvidenceSchemas.js +6 -0
  289. package/dist/domain/javascript/javascriptApplicationGraph.js +41 -16
  290. package/dist/domain/javascript/javascriptApplicationGraphSchemas.js +9 -2
  291. package/dist/domain/javascript/javascriptApplicationVersionComparison.js +4 -4
  292. package/dist/domain/javascript/javascriptApplicationVersionComparisonSchemas.js +37 -22
  293. package/dist/domain/javascript/javascriptApplicationVersionItems.js +50 -36
  294. package/dist/domain/javascript/javascriptApplicationVersionKeys.js +9 -8
  295. package/dist/domain/javascript/javascriptAstFingerprint.js +2 -2
  296. package/dist/domain/javascript/javascriptAstValues.js +22 -0
  297. package/dist/{application/javascript/JavaScriptReturnShapeProjection.js → domain/javascript/javascriptExportReturnShapeProjection.js} +4 -4
  298. package/dist/domain/javascript/javascriptExportShapeComparison.js +10 -3
  299. package/dist/domain/javascript/javascriptExportShapeComparisonIdentity.js +6 -1
  300. package/dist/domain/javascript/javascriptExportShapeComparisonSchemas.js +58 -22
  301. package/dist/domain/javascript/javascriptExportShapeSelection.js +7 -7
  302. package/dist/domain/javascript/javascriptExportShapeVariants.js +70 -16
  303. package/dist/domain/javascript/javascriptFeatureSeed.js +25 -3
  304. package/dist/domain/javascript/javascriptFeatureTrace.js +7 -6
  305. package/dist/domain/javascript/javascriptFeatureTraceSchemas.js +17 -9
  306. package/dist/domain/javascript/javascriptFeatureTraversal.js +4 -5
  307. package/dist/domain/javascript/javascriptNativeHandoff.js +7 -7
  308. package/dist/domain/javascript/javascriptRuntimeLoadState.js +0 -1
  309. package/dist/domain/javascript/javascriptRuntimeObservation.js +18 -7
  310. package/dist/domain/javascript/javascriptRuntimeReconciliation.js +12 -6
  311. package/dist/domain/javascript/javascriptRuntimeReconciliationActive.js +9 -8
  312. package/dist/domain/javascript/javascriptRuntimeReconciliationCaptureParsing.js +212 -0
  313. package/dist/domain/javascript/javascriptRuntimeReconciliationGraph.js +5 -4
  314. package/dist/domain/javascript/javascriptRuntimeReconciliationInputValidation.js +28 -0
  315. package/dist/domain/javascript/javascriptRuntimeReconciliationMatching.js +6 -6
  316. package/dist/domain/javascript/javascriptRuntimeReconciliationParsing.js +12 -222
  317. package/dist/domain/javascript/javascriptRuntimeReconciliationResult.js +2 -2
  318. package/dist/domain/javascript/javascriptRuntimeReconciliationRuntime.js +15 -4
  319. package/dist/domain/javascript/javascriptRuntimeReconciliationSchemas.js +2 -2
  320. package/dist/domain/javascript/javascriptRuntimeStaticCandidates.js +7 -7
  321. package/dist/domain/javascript/javascriptSemanticAnalysis.js +209 -11
  322. package/dist/domain/javascript/javascriptSemanticAsyncEffects.js +2 -1
  323. package/dist/domain/javascript/javascriptSemanticCallResolution.js +9 -7
  324. package/dist/domain/javascript/javascriptSemanticCalls.js +2 -1
  325. package/dist/domain/javascript/javascriptSemanticChildProcesses.js +4 -3
  326. package/dist/domain/javascript/javascriptSemanticCoverage.js +20 -0
  327. package/dist/domain/javascript/javascriptSemanticDataEffectHelpers.js +7 -9
  328. package/dist/domain/javascript/javascriptSemanticDataEffects.js +4 -11
  329. package/dist/domain/javascript/javascriptSemanticFingerprints.js +2 -2
  330. package/dist/domain/javascript/javascriptSemanticGraph.js +220 -71
  331. package/dist/domain/javascript/javascriptSemanticGraphSchemas.js +19 -1
  332. package/dist/domain/javascript/javascriptSemanticIr.js +0 -4
  333. package/dist/domain/javascript/javascriptSemanticIterationSources.js +106 -0
  334. package/dist/domain/javascript/javascriptSemanticMemberMutations.js +515 -74
  335. package/dist/domain/javascript/javascriptSemanticMutationInitializers.js +190 -0
  336. package/dist/domain/javascript/javascriptSemanticMutationValues.js +44 -36
  337. package/dist/domain/javascript/javascriptSemanticObjects.js +79 -42
  338. package/dist/domain/javascript/javascriptSemanticPrimitives.js +8 -14
  339. package/dist/domain/javascript/javascriptSemanticProjection.js +21 -16
  340. package/dist/domain/javascript/javascriptSemanticPromises.js +16 -21
  341. package/dist/domain/javascript/javascriptSemanticPropertyPaths.js +23 -0
  342. package/dist/domain/javascript/javascriptSemanticProvenance.js +3 -3
  343. package/dist/domain/javascript/javascriptSemanticQuery.js +8 -2
  344. package/dist/domain/javascript/javascriptSemanticQueryIdentity.js +3 -2
  345. package/dist/domain/javascript/javascriptSemanticQuerySchemas.js +8 -9
  346. package/dist/domain/javascript/javascriptSemanticRequireOrigin.js +16 -10
  347. package/dist/domain/javascript/javascriptSemanticResourceLimits.js +1 -1
  348. package/dist/domain/javascript/javascriptSemanticResources.js +1 -1
  349. package/dist/domain/javascript/javascriptSemanticReturns.js +55 -44
  350. package/dist/domain/javascript/javascriptSemanticSlots.js +72 -0
  351. package/dist/domain/javascript/javascriptSemanticTraversal.js +6 -1
  352. package/dist/domain/javascript/javascriptSemanticValues.js +180 -76
  353. package/dist/domain/javascript/javascriptSourceMapPaths.js +114 -0
  354. package/dist/domain/javascript/javascriptSourceParser.js +34 -9
  355. package/dist/domain/javascript/javascriptStaticAnalysisBundler.js +5 -6
  356. package/dist/domain/javascript/javascriptStaticAnalysisCalls.js +2 -1
  357. package/dist/domain/javascript/javascriptStaticAnalysisHelpers.js +26 -16
  358. package/dist/domain/javascript/sourceToBundleComparison.js +19 -8
  359. package/dist/domain/javascript/sourceToBundleSignals.js +53 -25
  360. package/dist/domain/jsonSerialization.js +109 -55
  361. package/dist/domain/jsonShape.js +46 -19
  362. package/dist/domain/localPath.js +10 -4
  363. package/dist/domain/managed/managedApplicationGraph.js +10 -6
  364. package/dist/domain/managed/managedApplicationGraphNodes.js +82 -57
  365. package/dist/domain/managed/managedArtifact.js +6 -4
  366. package/dist/domain/managed/managedMemberComparison.js +2 -9
  367. package/dist/domain/managed/managedMemberComparisonMatch.js +6 -7
  368. package/dist/domain/managed/managedNativeVerification.js +0 -2
  369. package/dist/domain/managed/managedNativeVerificationMatch.js +9 -3
  370. package/dist/domain/native/binaryLayout.js +2 -3
  371. package/dist/domain/native/nativeApiBoundary.js +1 -1
  372. package/dist/domain/native/nativeCallObservation.js +3 -3
  373. package/dist/domain/native/nativeInstruction.js +7 -0
  374. package/dist/domain/native/nativeValueFlow.js +5 -11
  375. package/dist/domain/native/objcSwiftMetadata.js +15 -17
  376. package/dist/domain/native/recordedCrash.js +2 -3
  377. package/dist/domain/offsetDateTime.js +17 -0
  378. package/dist/domain/process/processCapture.js +22 -20
  379. package/dist/domain/process/processCaptureCoverage.js +70 -0
  380. package/dist/domain/process/processCaptureExample.js +45 -1
  381. package/dist/domain/process/processCaptureParsing.js +1 -34
  382. package/dist/domain/process/processCaptureValidation.js +82 -13
  383. package/dist/domain/process/processComparison.js +39 -43
  384. package/dist/domain/process/processObservation.js +10 -2
  385. package/dist/domain/process/processScenario.js +24 -2
  386. package/dist/domain/process/processTraceComparison.js +0 -2
  387. package/dist/domain/process/processTraceDimensionProjection.js +1 -1
  388. package/dist/domain/process/processTraceEvaluation.js +19 -15
  389. package/dist/domain/process/processTraceSpecification.js +4 -7
  390. package/dist/domain/providerAdapterError.js +2 -0
  391. package/dist/domain/providerCleanupError.js +6 -2
  392. package/dist/domain/reconstructionCoverage.js +7 -3
  393. package/dist/domain/reconstructionObligationLedgerSchemas.js +2 -1
  394. package/dist/domain/reconstructionReadinessSchemas.js +2 -1
  395. package/dist/domain/reconstructionUnknowns.js +4 -3
  396. package/dist/domain/reconstructionVerification.js +6 -5
  397. package/dist/domain/reconstructionVerificationSchemas.js +2 -1
  398. package/dist/domain/referenceSourceGraph.js +27 -28
  399. package/dist/domain/referenceSourceImportParsing.js +34 -45
  400. package/dist/domain/residualUnknown.js +3 -2
  401. package/dist/domain/staticRuntimeCorrelation.js +4 -3
  402. package/dist/domain/stringPatterns.js +6 -0
  403. package/dist/domain/swiftSymbolClassification.js +66 -0
  404. package/dist/domain/symbolAnalysis.js +83 -20
  405. package/dist/domain/unicodeCodePointOrder.js +6 -0
  406. package/dist/domain/webBundleAnalyzerInspection.js +9 -1
  407. package/dist/domain/webCaptureDiff.js +71 -30
  408. package/dist/domain/webCaptureDiffSchemas.js +8 -11
  409. package/dist/domain/webEventListeners.js +3 -2
  410. package/dist/domain/webExecution.js +3 -2
  411. package/dist/domain/webInventory.js +3 -2
  412. package/dist/domain/webMcpDiscovery.js +4 -3
  413. package/dist/domain/webRuntime.js +0 -2
  414. package/dist/domain/webScriptExport.js +2 -2
  415. package/dist/dotnet/ManagedArtifactInspector.js +2 -19
  416. package/dist/dotnet/ManagedMemberInspector.js +12 -18
  417. package/dist/dotnet/ManagedMemberInspectorCore.js +47 -44
  418. package/dist/dotnet/ManagedMemberInstructionDecoder.js +1 -2
  419. package/dist/dotnet/ManagedMemberRows.js +75 -62
  420. package/dist/dotnet/ManagedMetadataInventory.js +16 -22
  421. package/dist/dotnet/ManagedMethodBodyReader.js +4 -0
  422. package/dist/dotnet/ManagedNativeBoundaryHelpers.js +109 -94
  423. package/dist/dotnet/ManagedNativeBoundaryInspector.js +12 -21
  424. package/dist/dotnet/ManagedReaderFailure.js +16 -0
  425. package/dist/dotnet/ManagedStaticProvider.js +13 -12
  426. package/dist/dotnet/ManagedStaticProviderMetadata.js +1 -4
  427. package/dist/evaluation/AgentEvaluationFixtures.js +250 -0
  428. package/dist/evaluation/AgentEvaluationReport.js +28 -0
  429. package/dist/evaluation/CodexAgentEval.js +12 -8
  430. package/dist/evaluation/KnownAnswerEvaluation.js +281 -0
  431. package/dist/evm/EvmoleInterfaceProvider.js +2 -1
  432. package/dist/filesystem/RegularFile.js +41 -0
  433. package/dist/firmware/FirmwareCommand.js +9 -5
  434. package/dist/firmware/FirmwareProvider.js +4 -4
  435. package/dist/generatedPackageMetadata.js +2 -2
  436. package/dist/ghidra/GhidraAnalysisProfile.js +3 -6
  437. package/dist/ghidra/GhidraClient.js +105 -36
  438. package/dist/ghidra/GhidraClientStartup.js +0 -2
  439. package/dist/ghidra/GhidraDoctor.js +6 -5
  440. package/dist/ghidra/GhidraFunctionValues.js +3 -5
  441. package/dist/ghidra/GhidraInstallation.js +151 -22
  442. package/dist/ghidra/GhidraJavaLaunch.js +6 -2
  443. package/dist/ghidra/GhidraLauncher.js +58 -26
  444. package/dist/ghidra/GhidraProvider.js +6 -2
  445. package/dist/ghidra/GhidraProviderCapabilities.js +6 -0
  446. package/dist/ghidra/GhidraProviderClient.js +13 -3
  447. package/dist/ghidra/GhidraSessionError.js +2 -0
  448. package/dist/ghidra/GhidraSessionRoot.js +39 -0
  449. package/dist/ghidra/extensions/GhidraExtensions.js +17 -10
  450. package/dist/ghidra/extensions/nativeaot/NativeAotAdapter.js +8 -2
  451. package/dist/hopper/BridgeLauncher.js +34 -45
  452. package/dist/hopper/HopperAnalysisProfile.js +3 -8
  453. package/dist/hopper/HopperCleanup.js +56 -27
  454. package/dist/hopper/HopperClient.js +86 -65
  455. package/dist/hopper/HopperMachOImage.js +3 -2
  456. package/dist/hopper/HopperProvider.js +16 -18
  457. package/dist/hopper/HopperRegexSearch.js +3 -6
  458. package/dist/hopper/HopperTargetLease.js +132 -49
  459. package/dist/hopper/LinuxPrivateDisplayProbe.js +6 -0
  460. package/dist/ida/IdaConfiguration.js +8 -3
  461. package/dist/ida/IdaInput.js +1 -7
  462. package/dist/ida/IdaMcpConnection.js +8 -4
  463. package/dist/ida/IdaOperationRunner.js +5 -3
  464. package/dist/ida/IdaProvider.js +8 -12
  465. package/dist/ida/IdaSessionClient.js +24 -20
  466. package/dist/ida/IdaWorkspace.js +12 -13
  467. package/dist/inspector/JavaScriptRuntimeScope.js +9 -5
  468. package/dist/inspector/V8InspectorCaptureProjection.js +47 -14
  469. package/dist/inspector/V8InspectorProvider.js +97 -35
  470. package/dist/javascript/recovery/WakaruCommand.js +7 -2
  471. package/dist/javascript/recovery/WakaruExecution.js +5 -2
  472. package/dist/main/shutdown.js +81 -29
  473. package/dist/main/startup.js +9 -2
  474. package/dist/main/transport.js +23 -3
  475. package/dist/main.js +11 -18
  476. package/dist/native/AppleMachoSelection.js +16 -6
  477. package/dist/native/AppleObjcDispatchFacets.js +3 -3
  478. package/dist/native/AppleObjcProperties.js +17 -7
  479. package/dist/native/CommandRunner.js +9 -7
  480. package/dist/native/LldbCallTracer.js +249 -77
  481. package/dist/native/NativeMacOSProvider.js +32 -17
  482. package/dist/native/NativeMacOSProviderMetadata.js +1 -2
  483. package/dist/native/NativeUiHelperRuntime.js +11 -2
  484. package/dist/native/NativeUiObservation.js +2 -2
  485. package/dist/native/pwntools/PwntoolsDecoder.js +2 -1
  486. package/dist/process/DarwinProcessRunTokenReader.js +16 -2
  487. package/dist/process/ExecFileOutput.js +88 -6
  488. package/dist/process/PrivateRuntimeRoot.js +10 -5
  489. package/dist/process/ProcessOwnership.js +1 -4
  490. package/dist/process/ProcessOwnershipObservation.js +18 -16
  491. package/dist/process/ProviderProcess.js +1 -3
  492. package/dist/process/capture/FilesystemSnapshot.js +131 -24
  493. package/dist/process/capture/ProcessCaptureError.js +13 -0
  494. package/dist/process/capture/ProcessCaptureLifecycle.js +148 -74
  495. package/dist/process/capture/ProcessFilesystemEffects.js +51 -6
  496. package/dist/process/capture/ProcessHarness.js +16 -33
  497. package/dist/process/capture/ProcessNormalization.js +20 -2
  498. package/dist/process/capture/ProcessSampling.js +25 -2
  499. package/dist/process/capture/TerminalRenderer.js +14 -0
  500. package/dist/process/snapshotEnvironment.js +14 -0
  501. package/dist/server/EvidenceMcpServer.js +25 -14
  502. package/dist/server/analysisAdmission.js +8 -0
  503. package/dist/server/createServer.js +71 -59
  504. package/dist/server/mcpClientMetadata.js +12 -5
  505. package/dist/server/promptCompletion.js +3 -8
  506. package/dist/server/registerAnalysisViewTool.js +15 -0
  507. package/dist/server/registerAndroidTools.js +2 -3
  508. package/dist/server/registerApplicationTools/compareExportShapes.js +6 -6
  509. package/dist/server/registerApplicationTools/compareSourceToBundle.js +4 -5
  510. package/dist/server/registerApplicationTools/compareVersions.js +4 -5
  511. package/dist/server/registerApplicationTools/coverage.js +1 -2
  512. package/dist/server/registerApplicationTools/helpers.js +4 -4
  513. package/dist/server/registerApplicationTools/obligationLedger.js +4 -5
  514. package/dist/server/registerApplicationTools/projectMobileApplicationGraph.js +3 -4
  515. package/dist/server/registerApplicationTools/traceFeature.js +4 -5
  516. package/dist/server/registerApplicationTools/traceSemantics.js +4 -5
  517. package/dist/server/registerArtifactComparisonTool.js +4 -5
  518. package/dist/server/registerArtifactTools.js +2 -2
  519. package/dist/server/registerBinaryDiagnosticsTools.js +2 -3
  520. package/dist/server/registerBrowserScenarioTool.js +3 -4
  521. package/dist/server/registerBrowserTools.js +13 -16
  522. package/dist/server/registerBundleComparisonTool.js +5 -6
  523. package/dist/server/registerCloseLifecycleTool.js +8 -7
  524. package/dist/server/registerElectronTools.js +10 -13
  525. package/dist/server/registerEnhancedTools.js +82 -77
  526. package/dist/server/registerEvidenceTools.js +54 -47
  527. package/dist/server/registerEvmTools.js +2 -3
  528. package/dist/server/registerFirmwareTools.js +2 -3
  529. package/dist/server/registerFunctionComparisonTool.js +7 -8
  530. package/dist/server/registerInvestigationTools.js +14 -15
  531. package/dist/server/registerJavaScriptRecoveryTool.js +2 -3
  532. package/dist/server/registerJavaScriptRuntimeObservationTools.js +6 -6
  533. package/dist/server/registerManagedTools.js +7 -4
  534. package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +5 -6
  535. package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +4 -5
  536. package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +6 -7
  537. package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +6 -7
  538. package/dist/server/registerOfficialTools.js +32 -41
  539. package/dist/server/registerProcessComparisonTool.js +8 -8
  540. package/dist/server/registerRecordedCrashTools.js +2 -3
  541. package/dist/server/registerSessionRecordTools.js +15 -19
  542. package/dist/server/registerSessionStatusTool.js +3 -4
  543. package/dist/server/registerSessionTools.js +19 -19
  544. package/dist/server/registerWebModuleTool.js +2 -3
  545. package/dist/server/registerWebNetworkCaptureTool.js +2 -3
  546. package/dist/server/registerWebRuntimeTools.js +4 -5
  547. package/dist/server/registerWebScriptTool.js +2 -3
  548. package/dist/server/registerWebSourceLocationTool.js +2 -3
  549. package/dist/server/toolResult.js +66 -94
  550. package/dist/server/toolResultEncoding.js +11 -10
  551. package/dist/windows/WindowsNativeLoader.js +1 -0
  552. package/dist/windows/WindowsOwnedProcess.js +60 -15
  553. package/dist/windows/WindowsPrivateRuntime.js +7 -8
  554. package/native/windows/README.md +3 -1
  555. package/native/windows/build/manifest.json +2 -2
  556. package/native/windows/build/rea-windows-x64.node +0 -0
  557. package/package.json +42 -30
  558. package/scripts/rea.mjs +3 -6
  559. package/skills/reverse-engineer-anything/SKILL.md +14 -13
  560. package/skills/reverse-engineer-anything/references/android-applications.md +6 -3
  561. package/skills/reverse-engineer-anything/references/evidence-workflows.md +8 -4
  562. package/skills/reverse-engineer-anything/references/javascript-applications.md +16 -6
  563. package/skills/reverse-engineer-anything/references/native-and-artifacts.md +18 -0
  564. package/dist/artifacts/inventory/policy.js +0 -2
  565. package/dist/config.js +0 -1
  566. package/dist/contracts/browserCaptureToolInputSchema.js +0 -43
  567. package/dist/contracts/process/processCaptureExample.js +0 -2
  568. package/dist/contracts/toolOutputSchemas.js +0 -2
  569. package/dist/domain/managed/managedApplicationGraphNodeCoverage.js +0 -6
  570. package/dist/main/reload.js +0 -12
  571. package/dist/main/state.js +0 -3
  572. package/dist/server/registerNativeTools.js +0 -6
  573. package/dist/server/sessionToolPolicies.js +0 -2
@@ -1,6 +1,7 @@
1
1
  import { z } from "zod";
2
- import { isAbsoluteLocalPath, localPathStringSchema } from "../localPath.js";
3
- const pathInputSchema = localPathStringSchema.refine(isAbsoluteLocalPath, {
2
+ import { isAbsolute } from "node:path";
3
+ import { localPathStringSchema } from "../localPath.js";
4
+ const pathInputSchema = localPathStringSchema.refine(isAbsolute, {
4
5
  message: "Electron executable, application, and root paths must be absolute local filesystem paths (for example /Applications/Electron.app/Contents/MacOS/Electron)",
5
6
  });
6
7
  const absolutePathSchema = z
@@ -61,61 +62,16 @@ export const electronActiveObservationInputSchema = z.strictObject({
61
62
  .optional()
62
63
  .describe("Absolute local filesystem root for application-relative paths; omit to derive it from the application path. Relative paths are rejected."),
63
64
  args: z
64
- .array(z.string().regex(/^[^\0]*$/u, "Electron arguments must not contain NUL"))
65
+ .array(z
66
+ .string()
67
+ .regex(/^[^\x00]*$/u, "Electron arguments must not contain NUL"))
65
68
  .default([]),
66
69
  actions: z.array(actionSchema).default([]),
67
70
  });
68
- const ipcEventSchema = z.strictObject({
69
- sequence: z.number().int().min(1),
70
- correlation_id: z.string().nullable().default(null),
71
- kind: z.enum([
72
- "main-handler-invocation",
73
- "main-event-invocation",
74
- "utility-process-fork",
75
- "utility-process-message",
76
- "ipc-main-to-renderer",
77
- "ipc-utility-to-main",
78
- "ipc-renderer-send",
79
- "ipc-renderer-invoke",
80
- "ipc-renderer-post-message",
81
- ]),
82
- event: z.string().nullable().optional(),
83
- phase: z
84
- .enum(["attempted", "completed", "blocked", "failed", "observed"])
85
- .nullable()
86
- .optional(),
87
- channel: z.string().nullable(),
88
- direction: z
89
- .enum([
90
- "renderer-to-main",
91
- "main-to-renderer",
92
- "main-to-utility",
93
- "utility-to-main",
94
- ])
95
- .nullable()
96
- .optional(),
97
- sender: z.string().nullable().optional(),
98
- receiver: z.string().nullable().optional(),
99
- frame: z.string().nullable().default(null),
100
- target: z.string().nullable().optional(),
101
- argument_shapes: z.array(z.string()),
102
- result_shape: z.string().nullable(),
103
- process_type: z.string().nullable(),
104
- source: z.string().default("electron-active-hook"),
105
- capture_method: z
106
- .enum(["api-wrapper", "event-emitter", "process-hook"])
107
- .default("api-wrapper"),
108
- artifact_path: z.string().nullable().default(null),
109
- artifact_sha256: z
110
- .string()
111
- .regex(/^[a-f0-9]{64}$/u)
112
- .nullable()
113
- .default(null),
114
- error: z.boolean(),
115
- });
116
- const timelineEventSchema = z.strictObject({
71
+ /** Canonical active Electron event shared by the hook boundary and public timeline. */
72
+ export const electronActiveTimelineEventSchema = z.strictObject({
117
73
  sequence: z.number().int().min(1),
118
- correlation_id: z.string().nullable().default(null),
74
+ correlation_id: z.string().nullable(),
119
75
  kind: z.enum([
120
76
  "main-handler-invocation",
121
77
  "main-event-invocation",
@@ -168,6 +124,19 @@ const timelineEventSchema = z.strictObject({
168
124
  .nullable(),
169
125
  error: z.boolean(),
170
126
  });
127
+ const ipcEventSchema = electronActiveTimelineEventSchema.extend({
128
+ kind: z.enum([
129
+ "main-handler-invocation",
130
+ "main-event-invocation",
131
+ "utility-process-fork",
132
+ "utility-process-message",
133
+ "ipc-main-to-renderer",
134
+ "ipc-utility-to-main",
135
+ "ipc-renderer-send",
136
+ "ipc-renderer-invoke",
137
+ "ipc-renderer-post-message",
138
+ ]),
139
+ });
171
140
  const processMetricSchema = z.strictObject({
172
141
  pid: z.number().int().min(1),
173
142
  type: z.string().min(1),
@@ -237,17 +206,14 @@ export const electronActiveObservationResultSchema = z.strictObject({
237
206
  ipc: z.strictObject({
238
207
  events: z.array(ipcEventSchema),
239
208
  observed: z.number().int().min(0),
240
- dropped: z.number().int().min(0).nullable().default(null),
209
+ dropped: z.number().int().min(0),
241
210
  }),
242
- timeline: z
243
- .strictObject({
244
- events: z.array(timelineEventSchema),
211
+ timeline: z.strictObject({
212
+ events: z.array(electronActiveTimelineEventSchema),
245
213
  observed: z.number().int().min(0),
246
- dropped: z.number().int().min(0).nullable().default(null),
247
- })
248
- .default({ events: [], observed: 0, dropped: null }),
249
- retention: z
250
- .strictObject({
214
+ dropped: z.number().int().min(0),
215
+ }),
216
+ retention: z.strictObject({
251
217
  budget_bytes: z.number().int().min(0),
252
218
  estimated_retained_bytes: z.number().int().min(0),
253
219
  event_serialized_byte_upper_bound: z.number().int().min(0),
@@ -265,15 +231,7 @@ export const electronActiveObservationResultSchema = z.strictObject({
265
231
  dropped_ipc: z.number().int().min(0),
266
232
  observed_runtime: z.number().int().min(0),
267
233
  dropped_runtime: z.number().int().min(0),
268
- })
269
- .nullable()
270
- .default(null),
271
- coverage: coverageSchema.default({
272
- status: "partial_attach",
273
- observed_event_families: [],
274
- unavailable_event_families: [],
275
- observed_roles: [],
276
- pre_capture_activity: "unavailable",
277
234
  }),
235
+ coverage: coverageSchema,
278
236
  limitations: z.array(z.string()),
279
237
  });
@@ -80,9 +80,20 @@ export const electronPageInspectionSchema = z.object({
80
80
  script_key: prefixedDigestSchema("electron_script"),
81
81
  frame_id: z.string().nullable().default(null),
82
82
  file_path: z.string(),
83
- cdp_hash: z.string(),
84
- length: z.number().int().min(0),
85
- is_module: z.boolean(),
83
+ cdp_hash: z
84
+ .string()
85
+ .nullable()
86
+ .describe("Producer-reported script hash; null when unavailable."),
87
+ length: z
88
+ .number()
89
+ .int()
90
+ .min(0)
91
+ .nullable()
92
+ .describe("Producer-reported script length; null when unavailable."),
93
+ is_module: z
94
+ .boolean()
95
+ .nullable()
96
+ .describe("Producer-reported module classification; null when unavailable."),
86
97
  language: z.string().nullable(),
87
98
  source: electronSourceSchema,
88
99
  })),
@@ -1,6 +1,6 @@
1
1
  import * as t from "@babel/types";
2
2
  import { boundedExpression, collectContextBridgeMembers, electronStaticValue, objectProperty, } from "./electronStaticAnalysisValues.js";
3
- import { compareCodePoints } from "../canonicalOrdering.js";
3
+ import { compareUnicodeCodePoints } from "../unicodeCodePointOrder.js";
4
4
  import { addLocatedFinding } from "./javascriptStaticAnalysisFindings.js";
5
5
  import { argumentNode, calleeName, range, staticPath, staticPathResolutionContext, } from "./javascriptStaticAnalysisHelpers.js";
6
6
  import { semanticStaticPropertyName } from "./javascriptAstValues.js";
@@ -54,10 +54,16 @@ const collectWindowOptions = (source, options) => {
54
54
  const collectWebPreferences = (source, object) => {
55
55
  const preferences = [];
56
56
  let unknown = 0;
57
- let preload = {
58
- preload_path: null,
59
- preload_resolution_context: null,
60
- };
57
+ const effectivePreload = objectProperty(object, "preload");
58
+ const preloadPath = effectivePreload.status === "explicit"
59
+ ? staticPath(effectivePreload.property.value)
60
+ : undefined;
61
+ const preload = effectivePreload.status === "explicit" && preloadPath !== undefined
62
+ ? {
63
+ preload_path: preloadPath,
64
+ preload_resolution_context: staticPathResolutionContext(effectivePreload.property.value),
65
+ }
66
+ : { preload_path: null, preload_resolution_context: null };
61
67
  for (const property of object.properties) {
62
68
  if (t.isSpreadElement(property)) {
63
69
  unknown += 1;
@@ -85,11 +91,6 @@ const collectWebPreferences = (source, object) => {
85
91
  continue;
86
92
  }
87
93
  const path = name === "preload" ? staticPath(property.value) : undefined;
88
- if (path !== undefined)
89
- preload = {
90
- preload_path: path,
91
- preload_resolution_context: staticPathResolutionContext(property.value),
92
- };
93
94
  const value = path === undefined
94
95
  ? electronStaticValue(source, property.value)
95
96
  : { status: "literal", value: path, expression: null };
@@ -97,7 +98,7 @@ const collectWebPreferences = (source, object) => {
97
98
  unknown += 1;
98
99
  preferences.push({ name, value });
99
100
  }
100
- preferences.sort((left, right) => compareCodePoints(left.name, right.name));
101
+ preferences.sort((left, right) => compareUnicodeCodePoints(left.name, right.name));
101
102
  return {
102
103
  status: "object-literal",
103
104
  preferences,
@@ -1,7 +1,9 @@
1
1
  import * as t from "@babel/types";
2
2
  import { boundedExpression, electronStaticValue, handlerKind, } from "./electronStaticAnalysisValues.js";
3
3
  import { addLocatedFinding } from "./javascriptStaticAnalysisFindings.js";
4
- import { argumentNode, calleeName, range, semanticStaticPropertyName, } from "./javascriptStaticAnalysisHelpers.js";
4
+ import { argumentNode, calleeName, range, } from "./javascriptStaticAnalysisHelpers.js";
5
+ import { semanticStaticPropertyName } from "./javascriptAstValues.js";
6
+ import { compositeKey } from "../unicodeCodePointOrder.js";
5
7
  /** Inspect Electron IPC operations and validation candidates. */
6
8
  export const inspectElectronIpcNode = (node, context) => {
7
9
  if (t.isCallExpression(node)) {
@@ -115,7 +117,14 @@ const addValidation = (context, node, input) => {
115
117
  };
116
118
  addLocatedFinding(context, {
117
119
  collection: context.accumulator.senderValidations,
118
- key: `electron-validation\0${input.subject}\0${input.mechanism}\0${input.expected.status === "literal" ? String(input.expected.value) : input.expected.expression}`,
120
+ key: compositeKey([
121
+ "electron-validation",
122
+ input.subject,
123
+ input.mechanism,
124
+ input.expected.status === "literal"
125
+ ? String(input.expected.value)
126
+ : input.expected.expression,
127
+ ]),
119
128
  node,
120
129
  value: finding,
121
130
  });
@@ -1,8 +1,9 @@
1
1
  import * as t from "@babel/types";
2
- import { compareCodePoints } from "../canonicalOrdering.js";
2
+ import { compareUnicodeCodePoints, compositeKey, } from "../unicodeCodePointOrder.js";
3
3
  import { stripQueryAndFragment } from "../artifactPathSyntax.js";
4
4
  import { addLocatedFinding } from "./javascriptStaticAnalysisFindings.js";
5
- import { argumentNode, calleeName, propertyName, range, semanticStaticPropertyName, stringValue, } from "./javascriptStaticAnalysisHelpers.js";
5
+ import { argumentNode, calleeName, range, stringValue, } from "./javascriptStaticAnalysisHelpers.js";
6
+ import { propertyName, semanticStaticPropertyName, } from "./javascriptAstValues.js";
6
7
  /** Inspect JavaScript-side imports and re-exports of native .node addons. */
7
8
  export const inspectElectronNativeNode = (node, context) => {
8
9
  if (t.isImportDeclaration(node))
@@ -97,11 +98,13 @@ const addBinding = (input) => {
97
98
  const { context, node, specifier, kind } = input;
98
99
  const unique = [
99
100
  ...new Set(input.members.filter((member) => member !== "")),
100
- ].sort(compareCodePoints);
101
+ ].sort(compareUnicodeCodePoints);
101
102
  const members = unique.length === 0 ? ["*"] : unique;
102
103
  addLocatedFinding(context, {
103
104
  collection: context.accumulator.nativeAddonBindings,
104
- key: `native-addon-binding\0${kind}\0${specifier}\0${members.join("\0")}`,
105
+ // Members are a variable-length source-derived list: compositeKey keeps
106
+ // ["a\0b"] distinct from ["a", "b"] instead of collapsing one binding.
107
+ key: compositeKey(["native-addon-binding", kind, specifier, members]),
105
108
  node,
106
109
  value: {
107
110
  specifier,
@@ -1,5 +1,5 @@
1
1
  import * as t from "@babel/types";
2
- import { compareCodePoints } from "../canonicalOrdering.js";
2
+ import { compareUnicodeCodePoints } from "../unicodeCodePointOrder.js";
3
3
  import { readExactJavaScriptLiteral, semanticStaticPropertyName, } from "./javascriptAstValues.js";
4
4
  import { sourceSlice } from "./javascriptStaticAnalysisHelpers.js";
5
5
  /** Preserve one literal value or the exact inert expression. */
@@ -72,7 +72,7 @@ export const collectContextBridgeMembers = (node) => {
72
72
  unknown: 0,
73
73
  };
74
74
  collectMembersAt(node, "", 0, state);
75
- const members = [...new Set(state.members)].sort(compareCodePoints);
75
+ const members = [...new Set(state.members)].sort(compareUnicodeCodePoints);
76
76
  return {
77
77
  status: "object-literal",
78
78
  members,
@@ -107,7 +107,11 @@ const literalValue = (node) => {
107
107
  if (literal.found)
108
108
  return literal;
109
109
  if (t.isUnaryExpression(node, { operator: "-" }) &&
110
- t.isNumericLiteral(node.argument))
111
- return { found: true, value: -node.argument.value };
110
+ t.isNumericLiteral(node.argument)) {
111
+ const value = -node.argument.value;
112
+ return Number.isFinite(value) && !Object.is(value, -0)
113
+ ? { found: true, value }
114
+ : { found: false };
115
+ }
112
116
  return { found: false };
113
117
  };
@@ -3,12 +3,14 @@ import { javascriptApplicationGraphSchema, isValidatedImmutableJavaScriptApplica
3
3
  import { javaScriptSemanticGraphSchema, isValidatedImmutableJavaScriptSemanticGraph, } from "./javascriptSemanticGraph.js";
4
4
  import { digestSchema } from "../digests.js";
5
5
  import { prefixedDigestSchema } from "../digests.js";
6
+ import { integrityContradictionSchema } from "../artifactGraph.js";
6
7
  import { localPathStringSchema } from "../localPath.js";
7
8
  const countSchema = z.number().int().min(0);
8
9
  /** Public target-free request for static JavaScript application analysis. */
9
10
  export const analyzeJavaScriptApplicationInputSchema = z.strictObject({
10
11
  input_path: localPathStringSchema,
11
12
  format: z.enum(["auto", "asar", "directory"]).default("auto"),
13
+ integrity_policy: z.enum(["fail", "record-and-continue"]).default("fail"),
12
14
  });
13
15
  /** Compact counts for the high-level Electron architecture/security surface. */
14
16
  const electronBoundarySummarySchema = z.strictObject({
@@ -44,7 +46,6 @@ const reconstructionStatisticsSchema = z.strictObject({
44
46
  findings: countSchema,
45
47
  modules: countSchema,
46
48
  parse_failures: countSchema,
47
- truncated_scopes: countSchema,
48
49
  });
49
50
  const applicationAnalysisResultShape = z.strictObject({
50
51
  input_path: z.string().min(1),
@@ -52,6 +53,7 @@ const applicationAnalysisResultShape = z.strictObject({
52
53
  root_artifact_sha256: digestSchema,
53
54
  inventory_manifest_id: prefixedDigestSchema("agm"),
54
55
  inventory_graph_sha256: digestSchema,
56
+ integrity_contradictions: z.array(integrityContradictionSchema),
55
57
  graph: javascriptApplicationGraphSchema,
56
58
  summary: electronBoundarySummarySchema,
57
59
  statistics: reconstructionStatisticsSchema,
@@ -1,5 +1,6 @@
1
- import { createJavaScriptApplicationEdge, createJavaScriptApplicationGraph, createJavaScriptApplicationNode, } from "./javascriptApplicationGraph.js";
2
- import { compareCodePoints, uniqueSorted } from "../canonicalOrdering.js";
1
+ import { createJavaScriptApplicationEdge, createImmutableJavaScriptApplicationGraphSteps, createJavaScriptApplicationNode, } from "./javascriptApplicationGraph.js";
2
+ import { uniqueSorted } from "../canonicalOrdering.js";
3
+ import { compareUnicodeCodePoints } from "../unicodeCodePointOrder.js";
3
4
  /** Merge compared nodes and add inferred right-to-left changed_from edges. */
4
5
  export const buildJavaScriptApplicationChangeGraph = (input) => {
5
6
  const allNodes = nodeCandidates(input);
@@ -24,7 +25,7 @@ export const buildJavaScriptApplicationChangeGraph = (input) => {
24
25
  const candidateEdges = uniqueEdges([...sourceEdges, ...comparisonEdges]);
25
26
  const rootNodeIds = preferredRoots.filter((nodeId) => retained.has(nodeId));
26
27
  const fallbackRoot = mergedNodes[0]?.node_id;
27
- const graph = createJavaScriptApplicationGraph({
28
+ const steps = createImmutableJavaScriptApplicationGraphSteps({
28
29
  schema: "JavaScriptApplicationGraph",
29
30
  root_node_ids: rootNodeIds.length > 0
30
31
  ? rootNodeIds
@@ -41,7 +42,10 @@ export const buildJavaScriptApplicationChangeGraph = (input) => {
41
42
  "The change graph contains compared entities and their retained relationships; it is not an executable application.",
42
43
  ]),
43
44
  });
44
- return { graph };
45
+ let next = steps.next();
46
+ while (!next.done)
47
+ next = steps.next();
48
+ return { graph: next.value };
45
49
  };
46
50
  const nodeCandidates = (input) => {
47
51
  const required = new Set([
@@ -145,7 +149,7 @@ const changeGraphCoverage = (input) => {
145
149
  };
146
150
  const sourceCoverageLimits = (input) => [
147
151
  ...new Map([...input.left.coverage.limits, ...input.right.coverage.limits].map((limit) => [`${limit.name}\0${limit.value}\0${limit.unit}`, limit])).values(),
148
- ].sort((left, right) => compareCodePoints(left.name, right.name));
152
+ ].sort((left, right) => compareUnicodeCodePoints(left.name, right.name));
149
153
  const combineOmittedCounts = (left, right) => left === null || right === null ? null : left + right;
150
154
  const mergeNodes = (nodes) => {
151
155
  const groups = new Map();
@@ -159,13 +163,13 @@ const mergeNodes = (nodes) => {
159
163
  ...new Map(group
160
164
  .flatMap(({ observations: values }) => values)
161
165
  .map((observation) => [observation.observation_id, observation])).values(),
162
- ].sort((left, right) => compareCodePoints(left.observation_id, right.observation_id));
166
+ ].sort((left, right) => compareUnicodeCodePoints(left.observation_id, right.observation_id));
163
167
  return createJavaScriptApplicationNode({
164
168
  kind: first.kind,
165
169
  identity: first.identity,
166
170
  observations: observations.map(({ observation_id: _id, identifier_strategy: _strategy, ...value }) => value),
167
171
  });
168
172
  });
169
- return merged.sort((left, right) => compareCodePoints(left.node_id, right.node_id));
173
+ return merged.sort((left, right) => compareUnicodeCodePoints(left.node_id, right.node_id));
170
174
  };
171
- const uniqueEdges = (edges) => [...new Map(edges.map((edge) => [edge.edge_id, edge])).values()].sort((left, right) => compareCodePoints(left.edge_id, right.edge_id));
175
+ const uniqueEdges = (edges) => [...new Map(edges.map((edge) => [edge.edge_id, edge])).values()].sort((left, right) => compareUnicodeCodePoints(left.edge_id, right.edge_id));
@@ -232,6 +232,10 @@ const applicationGraphEvidenceBaseSchema = z.strictObject({
232
232
  limitations: z.array(boundedTextSchema),
233
233
  evidence_ids: z.array(prefixedDigestSchema("ev")),
234
234
  });
235
+ /** Shared provenance fields apart from the fact-specific evidence location. */
236
+ export const applicationGraphEvidenceContextSchema = applicationGraphEvidenceBaseSchema.omit({ location: true });
237
+ /** Exact coordinates retained on each graph fact. */
238
+ export const applicationGraphEvidenceLocationSchema = applicationLocationReferenceSchema;
235
239
  const checkAuthorityState = (evidence, context) => {
236
240
  if (evidence.authority === "static-relationship-inference" &&
237
241
  evidence.state !== "inferred")
@@ -347,6 +351,8 @@ export const applicationNodeIdentitySchema = z.discriminatedUnion("strategy", [
347
351
  source_map_sha256: digestSchema,
348
352
  // The exact `sources` entry; `""` is a legal relative reference.
349
353
  original_source: z.string(),
354
+ // Exact leaf-local root; null means omitted or explicitly null.
355
+ source_root: z.string().nullable(),
350
356
  source_sha256: digestSchema.nullable(),
351
357
  }),
352
358
  z.strictObject({
@@ -1,6 +1,8 @@
1
1
  import { z } from "zod";
2
- import { canonicalDigest, canonicalJson } from "../comparisonSemantics.js";
3
- import { compareCodePoints, uniqueSorted } from "../canonicalOrdering.js";
2
+ import { canonicalJson } from "../comparisonSemantics.js";
3
+ import { digestCanonicalValue } from "../canonicalDigest.js";
4
+ import { uniqueSorted } from "../canonicalOrdering.js";
5
+ import { compareUnicodeCodePoints } from "../unicodeCodePointOrder.js";
4
6
  import { freezeOwnedJsonSnapshotSteps } from "../immutableJson.js";
5
7
  import { applicationEdgeInputSchema, applicationEdgeSchema, applicationNodeInputSchema, applicationNodeObservationSchema, applicationNodeSchema, javascriptApplicationGraphInputSchema, javascriptApplicationGraphRecordSchema, } from "./javascriptApplicationGraphSchemas.js";
6
8
  const OBSERVATION_IDENTIFIER_STRATEGY = {
@@ -12,7 +14,7 @@ const EDGE_IDENTIFIER_STRATEGY = {
12
14
  stability: "relationship-exact",
13
15
  };
14
16
  const limitKey = (limit) => canonicalJson(limit, "JavaScript Application Graph");
15
- const normalizeLimits = (limits) => [...new Map(limits.map((limit) => [limitKey(limit), limit])).values()].sort((left, right) => compareCodePoints(limitKey(left), limitKey(right)));
17
+ const normalizeLimits = (limits) => [...new Map(limits.map((limit) => [limitKey(limit), limit])).values()].sort((left, right) => compareUnicodeCodePoints(limitKey(left), limitKey(right)));
16
18
  const normalizeEvidence = (evidence) => ({
17
19
  ...evidence,
18
20
  coverage: {
@@ -29,13 +31,13 @@ const nodeSemantic = (node) => ({
29
31
  kind: node.kind,
30
32
  identity: node.identity,
31
33
  });
32
- const nodeId = (node) => `jag_node_${canonicalDigest(nodeSemantic(node), "JavaScript Application Graph")}`;
34
+ const nodeId = (node) => `jag_node_${digestCanonicalValue(nodeSemantic(node), "JavaScript Application Graph")}`;
33
35
  const observationSemantic = (nodeIdentifier, observation) => ({ node_id: nodeIdentifier, ...observation });
34
- const observationId = (nodeIdentifier, observation) => `jag_observation_${canonicalDigest(observationSemantic(nodeIdentifier, observation))}`;
35
- const edgeId = (edge) => `jag_edge_${canonicalDigest(edge, "JavaScript Application Graph")}`;
36
+ const observationId = (nodeIdentifier, observation) => `jag_observation_${digestCanonicalValue(observationSemantic(nodeIdentifier, observation))}`;
37
+ const edgeId = (edge) => `jag_edge_${digestCanonicalValue(edge, "JavaScript Application Graph")}`;
36
38
  const sortedUniqueIssue = (values, path, label, context) => {
37
39
  for (let index = 1; index < values.length; index += 1) {
38
- if (compareCodePoints(values[index - 1] ?? "", values[index] ?? "") < 0)
40
+ if (compareUnicodeCodePoints(values[index - 1] ?? "", values[index] ?? "") < 0)
39
41
  continue;
40
42
  context.addIssue({
41
43
  code: "custom",
@@ -63,6 +65,18 @@ const checkEvidenceNormalization = (evidence, path, context) => {
63
65
  path: [...path, "location"],
64
66
  });
65
67
  };
68
+ const sourceMapObservationMatchesIdentity = (identity, observation) => {
69
+ const { evidence, source_map_reference: reference } = observation;
70
+ return (reference !== null &&
71
+ evidence.state === "observed" &&
72
+ evidence.artifact.available &&
73
+ evidence.artifact.sha256 === identity.source_map_sha256 &&
74
+ reference.source_name === identity.original_source &&
75
+ reference.source_root === identity.source_root &&
76
+ evidence.location.available &&
77
+ evidence.location.value.kind === "artifact-path" &&
78
+ reference.map_path === evidence.location.value.path);
79
+ };
66
80
  const observationMatchesIdentity = (node, observation) => {
67
81
  const { identity } = node;
68
82
  const { evidence } = observation;
@@ -71,9 +85,7 @@ const observationMatchesIdentity = (node, observation) => {
71
85
  evidence.artifact.available &&
72
86
  evidence.artifact.sha256 === identity.sha256);
73
87
  if (identity.strategy === "source-map-original")
74
- return (evidence.state === "observed" &&
75
- evidence.artifact.available &&
76
- evidence.artifact.sha256 === identity.source_map_sha256);
88
+ return sourceMapObservationMatchesIdentity(identity, observation);
77
89
  if (identity.strategy === "canonical-path")
78
90
  return (evidence.artifact.available &&
79
91
  evidence.artifact.sha256 === identity.artifact_sha256 &&
@@ -126,6 +138,19 @@ const checkNode = (node, index, context) => {
126
138
  "observation_id",
127
139
  ],
128
140
  });
141
+ if (node.identity.strategy === "source-map-original" &&
142
+ !observationMatchesIdentity(node, observation))
143
+ context.addIssue({
144
+ code: "custom",
145
+ message: "Source-map observation must retain its exact declaration and map location",
146
+ path: [
147
+ "nodes",
148
+ index,
149
+ "observations",
150
+ observationIndex,
151
+ "source_map_reference",
152
+ ],
153
+ });
129
154
  checkEvidenceNormalization(observation.evidence, ["nodes", index, "observations", observationIndex, "evidence"], context);
130
155
  }
131
156
  if (!node.observations.some((observation) => observationMatchesIdentity(node, observation)))
@@ -190,7 +215,7 @@ const checkGraphInvariants = (graph, context) => {
190
215
  }
191
216
  const { graph_id: identifier, ...semantic } = graph;
192
217
  if (identifier !==
193
- `jag_${canonicalDigest(semantic, "JavaScript Application Graph")}`)
218
+ `jag_${digestCanonicalValue(semantic, "JavaScript Application Graph")}`)
194
219
  context.addIssue({
195
220
  code: "custom",
196
221
  message: "Graph identifier does not match its semantic content",
@@ -216,7 +241,7 @@ export const createJavaScriptApplicationNode = (input) => {
216
241
  observation_id: observationId(identifier, semantic),
217
242
  });
218
243
  })
219
- .sort((left, right) => compareCodePoints(left.observation_id, right.observation_id));
244
+ .sort((left, right) => compareUnicodeCodePoints(left.observation_id, right.observation_id));
220
245
  return applicationNodeSchema.parse({
221
246
  node_id: identifier,
222
247
  kind: parsed.kind,
@@ -243,8 +268,8 @@ export const createJavaScriptApplicationGraph = (input) => {
243
268
  const semantic = {
244
269
  ...parsed,
245
270
  root_node_ids: uniqueSorted(parsed.root_node_ids),
246
- nodes: [...parsed.nodes].sort((left, right) => compareCodePoints(left.node_id, right.node_id)),
247
- edges: [...parsed.edges].sort((left, right) => compareCodePoints(left.edge_id, right.edge_id)),
271
+ nodes: [...parsed.nodes].sort((left, right) => compareUnicodeCodePoints(left.node_id, right.node_id)),
272
+ edges: [...parsed.edges].sort((left, right) => compareUnicodeCodePoints(left.edge_id, right.edge_id)),
248
273
  coverage: {
249
274
  ...parsed.coverage,
250
275
  limits: normalizeLimits(parsed.coverage.limits),
@@ -253,7 +278,7 @@ export const createJavaScriptApplicationGraph = (input) => {
253
278
  };
254
279
  return javascriptApplicationGraphSchema.parse({
255
280
  ...semantic,
256
- graph_id: `jag_${canonicalDigest(semantic, "JavaScript Application Graph")}`,
281
+ graph_id: `jag_${digestCanonicalValue(semantic, "JavaScript Application Graph")}`,
257
282
  });
258
283
  };
259
284
  const validatedImmutableApplicationGraphs = new WeakSet();
@@ -271,6 +296,6 @@ export const isValidatedImmutableJavaScriptApplicationGraph = (value) => typeof
271
296
  /** Parse a stored graph and reject stale IDs. */
272
297
  export const parseJavaScriptApplicationGraph = (input) => javascriptApplicationGraphSchema.parse(input);
273
298
  /** Compute the byte-stable SHA-256 commitment of a verified graph. */
274
- export const computeJavaScriptApplicationGraphSha256 = (input) => canonicalDigest(parseJavaScriptApplicationGraph(input), "JavaScript Application Graph");
299
+ export const computeJavaScriptApplicationGraphSha256 = (input) => digestCanonicalValue(parseJavaScriptApplicationGraph(input), "JavaScript Application Graph");
275
300
  /** Serialize a verified graph as RFC 8785 canonical JSON. */
276
301
  export const serializeJavaScriptApplicationGraph = (input) => canonicalJson(parseJavaScriptApplicationGraph(input), "JavaScript Application Graph");
@@ -1,4 +1,5 @@
1
1
  import { z } from "zod";
2
+ import { javascriptSourceMapReferenceSchema } from "./javascriptSourceMapPaths.js";
2
3
  import { applicationCoverageSchema, applicationGraphEvidenceSchema, applicationNodeIdentitySchema, } from "./javascriptApplicationEvidenceSchemas.js";
3
4
  import { jsonValueSchema } from "../jsonValue.js";
4
5
  import { prefixedDigestSchema } from "../digests.js";
@@ -61,13 +62,19 @@ export const JAVASCRIPT_APPLICATION_RELATIONS = [
61
62
  const applicationRelationSchema = z.enum(JAVASCRIPT_APPLICATION_RELATIONS);
62
63
  const applicationPropertiesSchema = z.record(z.string().min(1), jsonValueSchema);
63
64
  /** One node observation before its semantic identifier is derived. */
64
- const applicationNodeObservationInputSchema = z.strictObject({
65
+ const applicationNodeObservationBaseSchema = z.strictObject({
65
66
  label: z.string().min(1).nullable(),
67
+ source_map_reference: javascriptSourceMapReferenceSchema.nullable(),
66
68
  properties: applicationPropertiesSchema,
67
69
  evidence: applicationGraphEvidenceSchema,
68
70
  });
71
+ const applicationNodeObservationInputSchema = applicationNodeObservationBaseSchema.extend({
72
+ source_map_reference: javascriptSourceMapReferenceSchema
73
+ .nullable()
74
+ .default(null),
75
+ });
69
76
  /** One immutable, evidence-bearing observation attached to an entity. */
70
- export const applicationNodeObservationSchema = applicationNodeObservationInputSchema.extend({
77
+ export const applicationNodeObservationSchema = applicationNodeObservationBaseSchema.extend({
71
78
  observation_id: prefixedDigestSchema("jag_observation"),
72
79
  identifier_strategy: z.strictObject({
73
80
  strategy: z.literal("semantic-content-sha256"),
@@ -1,7 +1,7 @@
1
- import { canonicalDigest } from "../comparisonSemantics.js";
1
+ import { digestCanonicalValue } from "../canonicalDigest.js";
2
2
  import { uniqueSorted } from "../canonicalOrdering.js";
3
3
  import { buildJavaScriptApplicationChangeGraph } from "./javascriptApplicationChangeGraph.js";
4
- import { applicationVersionComparisonResultSchema, } from "./javascriptApplicationVersionComparisonSchemas.js";
4
+ import { ownedApplicationVersionComparisonResultSchema, } from "./javascriptApplicationVersionComparisonSchemas.js";
5
5
  import { classifyJavaScriptApplicationVersions } from "./javascriptApplicationVersionItems.js";
6
6
  import { matchJavaScriptApplicationVersions } from "./javascriptApplicationVersionKeys.js";
7
7
  /** Compare application entities with ordered unique-only identity tiers. */
@@ -47,9 +47,9 @@ export const compareJavaScriptApplicationVersions = (input) => {
47
47
  evidence_links: evidenceLinks,
48
48
  limitations: comparisonLimitations(input),
49
49
  };
50
- return applicationVersionComparisonResultSchema.parse({
50
+ return ownedApplicationVersionComparisonResultSchema.parse({
51
51
  ...semantic,
52
- comparison_id: `javc_${canonicalDigest(semantic, "Application version comparison")}`,
52
+ comparison_id: `javc_${digestCanonicalValue(semantic, "Application version comparison")}`,
53
53
  });
54
54
  };
55
55
  const summary = (items) => ({