rea-agents 6.1.0 → 6.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (453) hide show
  1. package/README.md +7 -5
  2. package/bridge/ghidra/ReaGhidraBridge.java +32 -4
  3. package/bridge/hopper_bridge.py +6 -1
  4. package/dist/android/JadxConfiguration.js +87 -7
  5. package/dist/android/JadxMcpTransport.js +14 -2
  6. package/dist/android/JadxProvider.js +57 -35
  7. package/dist/application/BinaryTargetResolver.js +5 -3
  8. package/dist/application/BrowserEvidence.js +3 -8
  9. package/dist/application/BrowserScenarioEvidence.js +2 -18
  10. package/dist/application/CapabilityInventory.js +43 -9
  11. package/dist/application/ClientConfigurationDocument.js +69 -25
  12. package/dist/application/DirectAnalysis.js +29 -14
  13. package/dist/application/DirectAnalysisCleanup.js +72 -0
  14. package/dist/application/DirectAnalysisStatus.js +4 -5
  15. package/dist/application/Doctor.js +15 -19
  16. package/dist/application/DoctorDiagnostics.js +1 -2
  17. package/dist/application/EnhancedTools.js +51 -6
  18. package/dist/application/EvidenceBundleFiles.js +8 -3
  19. package/dist/application/InvestigationProviders.js +9 -1
  20. package/dist/application/JsonFiles.js +42 -9
  21. package/dist/application/LinuxHopper.js +9 -6
  22. package/dist/application/MacHopper.js +15 -18
  23. package/dist/application/RealHopperAssertions.js +0 -11
  24. package/dist/application/ReconstructionObligationCandidates.js +1 -1
  25. package/dist/application/ReferenceSourceImportEntries.js +1 -1
  26. package/dist/application/Setup.js +8 -16
  27. package/dist/application/SetupHost.js +16 -27
  28. package/dist/application/SetupPlan.js +6 -6
  29. package/dist/application/Uninstall.js +81 -29
  30. package/dist/application/UpdateMaintenance.js +7 -5
  31. package/dist/application/UpdateRuntime.js +12 -12
  32. package/dist/application/WebScriptExportService.js +30 -4
  33. package/dist/application/WorkflowEvidence.js +25 -2
  34. package/dist/application/XrefsAddressResolution.js +45 -0
  35. package/dist/application/analysisView/AnalysisViewService.js +76 -0
  36. package/dist/application/binary/AnalysisClientCleanup.js +30 -5
  37. package/dist/application/binary/AnalysisProviderEvaluation.js +1 -2
  38. package/dist/application/binary/AnalysisProviderRegistry.js +2 -6
  39. package/dist/application/binary/AnalysisSnapshotCache.js +10 -8
  40. package/dist/application/binary/BinarySession.js +70 -29
  41. package/dist/application/binary/BinarySessionComposition.js +1 -3
  42. package/dist/application/binary/BinarySessionExecution.js +3 -5
  43. package/dist/application/binary/BinarySessionOpen.js +1 -1
  44. package/dist/application/binary/BinarySessionRecords.js +1 -1
  45. package/dist/application/binary/BinarySessionStatus.js +1 -6
  46. package/dist/application/binary/CompositeProvider.js +4 -18
  47. package/dist/application/binary/LazyAnalysisProvider.js +5 -5
  48. package/dist/application/binary/SessionProviderRouter.js +27 -135
  49. package/dist/application/homebrew.js +48 -0
  50. package/dist/application/javascript/ElectronActiveEvidence.js +9 -13
  51. package/dist/application/javascript/JavaScriptApplicationEvidence.js +2 -6
  52. package/dist/application/javascript/JavaScriptApplicationService.js +6 -1
  53. package/dist/application/javascript/JavaScriptArtifactAnalysis.js +5 -3
  54. package/dist/application/javascript/JavaScriptArtifactGraphBuilder.js +11 -9
  55. package/dist/application/javascript/JavaScriptArtifactGraphBundlers.js +11 -3
  56. package/dist/application/javascript/JavaScriptArtifactGraphContext.js +9 -0
  57. package/dist/application/javascript/JavaScriptArtifactGraphDocuments.js +8 -5
  58. package/dist/application/javascript/JavaScriptArtifactGraphFindings.js +12 -3
  59. package/dist/application/javascript/JavaScriptArtifactGraphStructure.js +0 -1
  60. package/dist/application/javascript/JavaScriptArtifactPathResolution.js +43 -16
  61. package/dist/application/javascript/JavaScriptArtifactReconstruction.js +46 -6
  62. package/dist/application/javascript/JavaScriptModuleRelationships.js +1 -1
  63. package/dist/application/javascript/JavaScriptRuntimeObservationService.js +3 -3
  64. package/dist/application/javascript/JavaScriptSemanticGraphAsyncProjection.js +2 -3
  65. package/dist/application/javascript/JavaScriptSemanticGraphChildProcessProjection.js +1 -2
  66. package/dist/application/javascript/JavaScriptSemanticGraphDataProjection.js +2 -3
  67. package/dist/application/javascript/JavaScriptSemanticGraphFlowProjection.js +1 -5
  68. package/dist/application/javascript/JavaScriptSemanticGraphObjectProjection.js +75 -46
  69. package/dist/application/javascript/JavaScriptSemanticGraphResourceProjection.js +2 -3
  70. package/dist/application/javascript/JavaScriptSemanticGraphValueProjection.js +42 -19
  71. package/dist/application/managed/ManagedMemberComparisonService.js +2 -1
  72. package/dist/application/managed/ManagedNativeVerificationService.js +2 -1
  73. package/dist/application/process/ProcessCli.js +11 -11
  74. package/dist/application/process/ProcessEvidence.js +0 -1
  75. package/dist/artifacts/ArtifactProvider.js +39 -14
  76. package/dist/artifacts/ArtifactReader.js +31 -0
  77. package/dist/artifacts/DirectoryArtifactReader.js +2 -1
  78. package/dist/artifacts/MachOSliceArtifactReader.js +9 -2
  79. package/dist/artifacts/NativeDmgArtifactReader.js +65 -20
  80. package/dist/artifacts/SafeOutputTree.js +16 -2
  81. package/dist/artifacts/ZipArtifactReader.js +11 -4
  82. package/dist/artifacts/apple/AppleAssetCatalogAnalysis.js +4 -2
  83. package/dist/artifacts/apple/DylibResolutionReader.js +17 -7
  84. package/dist/artifacts/apple/KeyedArchiveReader.js +21 -3
  85. package/dist/artifacts/extraction/ArtifactExtraction.js +78 -21
  86. package/dist/artifacts/inventory/ArtifactGraphConstruction.js +67 -61
  87. package/dist/artifacts/inventory/ArtifactInventory.js +0 -1
  88. package/dist/artifacts/inventory/reader.js +3 -3
  89. package/dist/artifacts/inventory/scanCanonical.js +48 -24
  90. package/dist/artifacts/inventory/scanReader.js +5 -9
  91. package/dist/browser/BrowserScenarioPartialObservation.js +106 -0
  92. package/dist/browser/CdpBrowserProvider.js +2 -3
  93. package/dist/browser/CdpCaptureEventHandlers.js +2 -4
  94. package/dist/browser/CdpCaptureEvents.js +0 -1
  95. package/dist/browser/CdpCaptureValues.js +20 -0
  96. package/dist/browser/CdpElectronProvider.js +0 -2
  97. package/dist/browser/CdpElectronScriptEvents.js +2 -8
  98. package/dist/browser/CdpElectronScripts.js +2 -3
  99. package/dist/browser/CdpPageCaptureScripts.js +2 -3
  100. package/dist/browser/CdpSafeMetadata.js +10 -10
  101. package/dist/browser/PlaywrightBrowserScenarioProvider.js +59 -44
  102. package/dist/browser/PlaywrightElectronActiveActions.js +2 -56
  103. package/dist/browser/PlaywrightElectronActiveProvider.js +10 -6
  104. package/dist/browser/PlaywrightScenarioArtifacts.js +1 -1
  105. package/dist/browser/PlaywrightScenarioBrowser.js +139 -39
  106. package/dist/browser/PlaywrightScenarioEvents.js +1 -1
  107. package/dist/browser/PlaywrightScenarioSession.js +39 -22
  108. package/dist/browser/assets/ScriptCaptureAdapters.js +1 -1
  109. package/dist/browser/history/CaptureFailures.js +6 -2
  110. package/dist/browser/history/MitmproxyCaptureAdapter.js +4 -2
  111. package/dist/catalogIdentity.js +0 -1
  112. package/dist/cli/analysisViewCommands.js +36 -0
  113. package/dist/cli/artifactCommands.js +11 -12
  114. package/dist/cli/coreAnalysisCommands.js +3 -3
  115. package/dist/cli/coreBinaryCommands.js +32 -27
  116. package/dist/cli/coreNativeCommands.js +9 -10
  117. package/dist/cli/electronCommands.js +4 -4
  118. package/dist/cli/interactiveSetup.js +6 -6
  119. package/dist/cli/managedCommands.js +7 -8
  120. package/dist/cli/nativeCallCommands.js +1 -2
  121. package/dist/cli/omittableDefaults.js +50 -0
  122. package/dist/cli/processCommands.js +3 -2
  123. package/dist/cli/setupCommands.js +16 -15
  124. package/dist/cli/utilityCommands.js +9 -9
  125. package/dist/cli.js +16 -8
  126. package/dist/cliBrowserScenarioCommands.js +2 -2
  127. package/dist/cliCommandNames.js +1 -0
  128. package/dist/cliJsonInput.js +15 -1
  129. package/dist/cliOutput.js +0 -38
  130. package/dist/composition/auxiliaryAnalysisProviders.js +27 -23
  131. package/dist/composition/binary.js +9 -9
  132. package/dist/composition/browserScenario.js +2 -1
  133. package/dist/composition/directAnalysis.js +20 -13
  134. package/dist/composition/electronScenario.js +1 -1
  135. package/dist/composition/optionalObservationProviders.js +12 -7
  136. package/dist/config/environment.js +6 -0
  137. package/dist/config/ghidraStartupTimeout.js +4 -9
  138. package/dist/config/homeDirectory.js +12 -0
  139. package/dist/config/mcpResponseBudget.js +9 -1
  140. package/dist/config/parseConfig.js +7 -3
  141. package/dist/config/parsers.js +19 -22
  142. package/dist/contracts/analysisViewToolContracts.js +56 -0
  143. package/dist/contracts/applicationToolContracts.js +5 -4
  144. package/dist/contracts/artifactComparisonExample.js +2 -2
  145. package/dist/contracts/artifactToolContracts.js +1 -1
  146. package/dist/contracts/browserScenarioToolContracts.js +1 -1
  147. package/dist/contracts/browserToolContracts.js +19 -15
  148. package/dist/contracts/enhancedInputs.js +2 -2
  149. package/dist/contracts/enhancedToolContracts.js +4 -3
  150. package/dist/contracts/evm/evmToolContracts.js +1 -1
  151. package/dist/contracts/functionWorkflowToolContracts.js +1 -1
  152. package/dist/contracts/inputSchemaPresentation.js +90 -0
  153. package/dist/contracts/investigationExamples.js +4 -3
  154. package/dist/contracts/javascript/electronToolContracts.js +1 -1
  155. package/dist/contracts/javascript/javascriptApplicationWorkflowExamples.js +0 -20
  156. package/dist/contracts/javascript/javascriptExportShapeComparisonExample.js +245 -0
  157. package/dist/contracts/javascript/javascriptRuntimeObservationToolContracts.js +1 -1
  158. package/dist/contracts/managed/managedToolContracts.js +5 -10
  159. package/dist/contracts/managed/managedWorkflowToolContracts.js +1 -1
  160. package/dist/contracts/mobileApplicationGraphExamples.js +3 -3
  161. package/dist/contracts/native/binaryDiagnosticsToolContracts.js +1 -1
  162. package/dist/contracts/native/nativeToolContracts.js +2 -2
  163. package/dist/contracts/officialToolContracts.js +2 -1
  164. package/dist/contracts/promptContracts.js +2 -2
  165. package/dist/contracts/providerSelection.js +1 -1
  166. package/dist/contracts/sessionToolContracts.js +14 -2
  167. package/dist/contracts/sessionToolSchemas.js +1 -14
  168. package/dist/contracts/toolContracts.js +2 -0
  169. package/dist/contracts/toolEffects.js +1 -0
  170. package/dist/contracts/toolOutputSchemaGroups.js +136 -92
  171. package/dist/contracts/toolOutputSchemaPrimitives.js +11 -21
  172. package/dist/contracts/toolSchemaMetadata.js +18 -69
  173. package/dist/contracts/webNetworkCaptureToolContracts.js +1 -1
  174. package/dist/contracts/webRuntimeToolContracts.js +1 -1
  175. package/dist/contracts/webScriptToolContracts.js +1 -1
  176. package/dist/doctorRuntime.js +7 -5
  177. package/dist/domain/analysisErrorCore.js +3 -0
  178. package/dist/domain/analysisErrorPresentation.js +18 -3
  179. package/dist/domain/analysisErrorProjection.js +24 -5
  180. package/dist/domain/analysisSnapshot.js +29 -31
  181. package/dist/domain/analysisView/analysisView.js +243 -0
  182. package/dist/domain/analysisView/analysisViewCoverage.js +19 -0
  183. package/dist/domain/analysisView/binaryLayoutView.js +159 -0
  184. package/dist/domain/analysisView/javascriptApplicationView.js +238 -0
  185. package/dist/domain/android/androidApplication.js +1 -1
  186. package/dist/domain/apple/appleApplication.js +1 -1
  187. package/dist/domain/apple/dylibResolution.js +10 -3
  188. package/dist/domain/apple/interfaceBuilderGraph.js +0 -1
  189. package/dist/domain/apple/keyedArchive.js +26 -2
  190. package/dist/domain/artifactComparison.js +15 -6
  191. package/dist/domain/artifactGraph.js +16 -3
  192. package/dist/domain/artifactInventoryEvidence.js +9 -16
  193. package/dist/domain/artifactOperationError.js +3 -3
  194. package/dist/domain/artifactPartialObservation.js +1 -0
  195. package/dist/domain/artifactPathSyntax.js +49 -0
  196. package/dist/domain/binaryTarget.js +39 -13
  197. package/dist/domain/browserCaptureComparison.js +13 -49
  198. package/dist/domain/browserNetworkEvidence.js +10 -4
  199. package/dist/domain/browserObservation.js +0 -1
  200. package/dist/domain/browserObservationSchemas.js +14 -3
  201. package/dist/domain/browserScenario.js +0 -1
  202. package/dist/domain/browserScenarioCapture.js +1 -2
  203. package/dist/domain/browserScenarioDiff.js +0 -2
  204. package/dist/domain/browserScenarioDiffEvidence.js +0 -12
  205. package/dist/domain/browserScenarioDiffValues.js +2 -2
  206. package/dist/domain/browserScenarioValues.js +3 -4
  207. package/dist/domain/callPath.js +8 -9
  208. package/dist/domain/callPathSchemas.js +2 -2
  209. package/dist/domain/changedBehavior.js +3 -3
  210. package/dist/domain/completionLedgerGeneration.js +2 -1
  211. package/dist/domain/configurationErrors.js +12 -0
  212. package/dist/domain/conformancePackage.js +4 -3
  213. package/dist/domain/evidence.js +10 -36
  214. package/dist/domain/evidenceBundle.js +7 -9
  215. package/dist/domain/evidenceCompletionLedger.js +2 -1
  216. package/dist/domain/functionComparison.js +4 -5
  217. package/dist/domain/functionComparisonDimensions.js +120 -87
  218. package/dist/domain/functionComparisonNormalization.js +23 -34
  219. package/dist/domain/functionComparisonResults.js +1 -4
  220. package/dist/domain/functionComparisonSchemas.js +2 -8
  221. package/dist/domain/functionDossierEvidence.js +2 -37
  222. package/dist/domain/javascript/electronActiveObservation.js +26 -69
  223. package/dist/domain/javascript/electronObservation.js +14 -3
  224. package/dist/domain/javascript/electronStaticAnalysisBrowser.js +10 -9
  225. package/dist/domain/javascript/electronStaticAnalysisIpc.js +2 -1
  226. package/dist/domain/javascript/electronStaticAnalysisNative.js +2 -1
  227. package/dist/domain/javascript/javascriptApplicationEvidenceSchemas.js +2 -0
  228. package/dist/domain/javascript/javascriptApplicationGraph.js +26 -3
  229. package/dist/domain/javascript/javascriptApplicationGraphSchemas.js +9 -2
  230. package/dist/domain/javascript/javascriptApplicationVersionItems.js +5 -2
  231. package/dist/domain/javascript/javascriptApplicationVersionKeys.js +2 -1
  232. package/dist/{application/javascript/JavaScriptReturnShapeProjection.js → domain/javascript/javascriptExportReturnShapeProjection.js} +4 -4
  233. package/dist/domain/javascript/javascriptExportShapeComparison.js +7 -1
  234. package/dist/domain/javascript/javascriptExportShapeComparisonIdentity.js +6 -1
  235. package/dist/domain/javascript/javascriptExportShapeComparisonSchemas.js +29 -1
  236. package/dist/domain/javascript/javascriptExportShapeSelection.js +5 -5
  237. package/dist/domain/javascript/javascriptExportShapeVariants.js +67 -14
  238. package/dist/domain/javascript/javascriptFeatureSeed.js +20 -0
  239. package/dist/domain/javascript/javascriptFeatureTraversal.js +0 -1
  240. package/dist/domain/javascript/javascriptNativeHandoff.js +1 -1
  241. package/dist/domain/javascript/javascriptRuntimeLoadState.js +0 -1
  242. package/dist/domain/javascript/javascriptRuntimeObservation.js +10 -2
  243. package/dist/domain/javascript/javascriptRuntimeReconciliationMatching.js +1 -1
  244. package/dist/domain/javascript/javascriptRuntimeReconciliationParsing.js +3 -2
  245. package/dist/domain/javascript/javascriptRuntimeStaticCandidates.js +0 -1
  246. package/dist/domain/javascript/javascriptSemanticAnalysis.js +9 -3
  247. package/dist/domain/javascript/javascriptSemanticAsyncEffects.js +2 -1
  248. package/dist/domain/javascript/javascriptSemanticCalls.js +2 -1
  249. package/dist/domain/javascript/javascriptSemanticChildProcesses.js +2 -1
  250. package/dist/domain/javascript/javascriptSemanticDataEffects.js +1 -1
  251. package/dist/domain/javascript/javascriptSemanticGraph.js +88 -46
  252. package/dist/domain/javascript/javascriptSemanticMemberMutations.js +77 -20
  253. package/dist/domain/javascript/javascriptSemanticMutationValues.js +21 -27
  254. package/dist/domain/javascript/javascriptSemanticObjects.js +83 -42
  255. package/dist/domain/javascript/javascriptSemanticPrimitives.js +1 -12
  256. package/dist/domain/javascript/javascriptSemanticProjection.js +2 -3
  257. package/dist/domain/javascript/javascriptSemanticPromises.js +2 -1
  258. package/dist/domain/javascript/javascriptSemanticResourceLimits.js +1 -1
  259. package/dist/domain/javascript/javascriptSemanticResources.js +1 -1
  260. package/dist/domain/javascript/javascriptSemanticReturns.js +32 -17
  261. package/dist/domain/javascript/javascriptSemanticSlots.js +72 -0
  262. package/dist/domain/javascript/javascriptSemanticValues.js +47 -54
  263. package/dist/domain/javascript/javascriptSourceMapPaths.js +104 -0
  264. package/dist/domain/javascript/javascriptStaticAnalysisCalls.js +2 -1
  265. package/dist/domain/javascript/javascriptStaticAnalysisHelpers.js +0 -1
  266. package/dist/domain/javascript/sourceToBundleComparison.js +12 -3
  267. package/dist/domain/javascript/sourceToBundleSignals.js +47 -19
  268. package/dist/domain/localPath.js +1 -1
  269. package/dist/domain/managed/managedArtifact.js +6 -4
  270. package/dist/domain/managed/managedMemberComparison.js +2 -9
  271. package/dist/domain/managed/managedNativeVerification.js +0 -2
  272. package/dist/domain/managed/managedNativeVerificationMatch.js +9 -3
  273. package/dist/domain/native/binaryLayout.js +2 -3
  274. package/dist/domain/native/nativeApiBoundary.js +1 -1
  275. package/dist/domain/native/nativeCallObservation.js +5 -3
  276. package/dist/domain/native/nativeInstruction.js +7 -0
  277. package/dist/domain/native/recordedCrash.js +2 -3
  278. package/dist/domain/offsetDateTime.js +17 -0
  279. package/dist/domain/process/processCapture.js +13 -12
  280. package/dist/domain/process/processCaptureCoverage.js +67 -0
  281. package/dist/domain/process/processCaptureExample.js +2 -1
  282. package/dist/domain/process/processCaptureParsing.js +1 -34
  283. package/dist/domain/process/processCaptureValidation.js +81 -13
  284. package/dist/domain/process/processComparison.js +41 -22
  285. package/dist/domain/process/processObservation.js +10 -2
  286. package/dist/domain/process/processScenario.js +24 -2
  287. package/dist/domain/process/processTraceComparison.js +0 -2
  288. package/dist/domain/process/processTraceDimensionProjection.js +1 -1
  289. package/dist/domain/process/processTraceEvaluation.js +15 -11
  290. package/dist/domain/process/processTraceSpecification.js +3 -4
  291. package/dist/domain/providerAdapterError.js +2 -0
  292. package/dist/domain/reconstructionCoverage.js +5 -2
  293. package/dist/domain/reconstructionObligationLedgerSchemas.js +2 -1
  294. package/dist/domain/reconstructionReadinessSchemas.js +2 -1
  295. package/dist/domain/reconstructionVerification.js +3 -3
  296. package/dist/domain/reconstructionVerificationSchemas.js +2 -1
  297. package/dist/domain/referenceSourceGraph.js +20 -21
  298. package/dist/domain/staticRuntimeCorrelation.js +2 -2
  299. package/dist/domain/stringPatterns.js +6 -0
  300. package/dist/domain/swiftSymbolClassification.js +61 -0
  301. package/dist/domain/symbolAnalysis.js +66 -18
  302. package/dist/domain/webCaptureDiff.js +0 -1
  303. package/dist/domain/webCaptureDiffSchemas.js +6 -3
  304. package/dist/domain/webEventListeners.js +3 -2
  305. package/dist/domain/webExecution.js +3 -2
  306. package/dist/domain/webRuntime.js +0 -2
  307. package/dist/domain/webScriptExport.js +1 -1
  308. package/dist/dotnet/ManagedArtifactInspector.js +2 -19
  309. package/dist/dotnet/ManagedMemberInspector.js +12 -18
  310. package/dist/dotnet/ManagedMemberInspectorCore.js +47 -44
  311. package/dist/dotnet/ManagedMemberRows.js +75 -62
  312. package/dist/dotnet/ManagedMetadataInventory.js +16 -22
  313. package/dist/dotnet/ManagedMethodBodyReader.js +4 -0
  314. package/dist/dotnet/ManagedNativeBoundaryHelpers.js +109 -94
  315. package/dist/dotnet/ManagedNativeBoundaryInspector.js +12 -21
  316. package/dist/dotnet/ManagedReaderFailure.js +16 -0
  317. package/dist/dotnet/ManagedStaticProvider.js +3 -5
  318. package/dist/evaluation/AgentEvaluationFixtures.js +250 -0
  319. package/dist/evaluation/AgentEvaluationReport.js +28 -0
  320. package/dist/evaluation/CodexAgentEval.js +12 -8
  321. package/dist/evaluation/KnownAnswerEvaluation.js +281 -0
  322. package/dist/evm/EvmoleInterfaceProvider.js +2 -1
  323. package/dist/firmware/FirmwareCommand.js +9 -5
  324. package/dist/firmware/FirmwareProvider.js +4 -4
  325. package/dist/generatedPackageMetadata.js +2 -2
  326. package/dist/ghidra/GhidraAnalysisProfile.js +3 -6
  327. package/dist/ghidra/GhidraClient.js +91 -32
  328. package/dist/ghidra/GhidraClientStartup.js +0 -2
  329. package/dist/ghidra/GhidraDoctor.js +6 -5
  330. package/dist/ghidra/GhidraFunctionValues.js +3 -5
  331. package/dist/ghidra/GhidraInstallation.js +40 -12
  332. package/dist/ghidra/GhidraJavaLaunch.js +6 -2
  333. package/dist/ghidra/GhidraLauncher.js +15 -7
  334. package/dist/ghidra/GhidraProvider.js +6 -2
  335. package/dist/ghidra/GhidraProviderCapabilities.js +6 -0
  336. package/dist/ghidra/GhidraProviderClient.js +13 -3
  337. package/dist/ghidra/GhidraSessionError.js +2 -0
  338. package/dist/ghidra/GhidraSessionRoot.js +39 -0
  339. package/dist/ghidra/extensions/GhidraExtensions.js +17 -10
  340. package/dist/ghidra/extensions/nativeaot/NativeAotAdapter.js +8 -2
  341. package/dist/hopper/BridgeLauncher.js +34 -45
  342. package/dist/hopper/HopperAnalysisProfile.js +3 -8
  343. package/dist/hopper/HopperCleanup.js +56 -27
  344. package/dist/hopper/HopperClient.js +86 -65
  345. package/dist/hopper/HopperMachOImage.js +3 -2
  346. package/dist/hopper/HopperProvider.js +16 -18
  347. package/dist/hopper/HopperRegexSearch.js +3 -6
  348. package/dist/hopper/HopperTargetLease.js +132 -49
  349. package/dist/hopper/LinuxPrivateDisplayProbe.js +6 -0
  350. package/dist/ida/IdaConfiguration.js +8 -3
  351. package/dist/ida/IdaInput.js +1 -7
  352. package/dist/ida/IdaMcpConnection.js +8 -4
  353. package/dist/ida/IdaOperationRunner.js +3 -3
  354. package/dist/ida/IdaProvider.js +8 -12
  355. package/dist/ida/IdaSessionClient.js +20 -18
  356. package/dist/ida/IdaWorkspace.js +12 -13
  357. package/dist/inspector/V8InspectorCaptureProjection.js +1 -1
  358. package/dist/inspector/V8InspectorProvider.js +38 -28
  359. package/dist/javascript/recovery/WakaruCommand.js +7 -2
  360. package/dist/javascript/recovery/WakaruExecution.js +5 -2
  361. package/dist/main/shutdown.js +11 -3
  362. package/dist/main/startup.js +9 -2
  363. package/dist/main/transport.js +22 -2
  364. package/dist/main.js +11 -18
  365. package/dist/native/AppleMachoSelection.js +16 -6
  366. package/dist/native/CommandRunner.js +9 -7
  367. package/dist/native/LldbCallTracer.js +8 -2
  368. package/dist/native/NativeMacOSProvider.js +25 -15
  369. package/dist/native/NativeUiHelperRuntime.js +11 -2
  370. package/dist/native/NativeUiObservation.js +2 -2
  371. package/dist/native/pwntools/PwntoolsDecoder.js +2 -1
  372. package/dist/process/DarwinProcessRunTokenReader.js +16 -2
  373. package/dist/process/ExecFileOutput.js +88 -6
  374. package/dist/process/PrivateRuntimeRoot.js +10 -5
  375. package/dist/process/ProcessOwnership.js +1 -4
  376. package/dist/process/ProcessOwnershipObservation.js +11 -5
  377. package/dist/process/ProviderProcess.js +1 -3
  378. package/dist/process/capture/FilesystemSnapshot.js +50 -13
  379. package/dist/process/capture/ProcessCaptureError.js +13 -0
  380. package/dist/process/capture/ProcessCaptureLifecycle.js +158 -70
  381. package/dist/process/capture/ProcessFilesystemEffects.js +33 -3
  382. package/dist/process/capture/ProcessHarness.js +21 -25
  383. package/dist/process/capture/ProcessNormalization.js +20 -2
  384. package/dist/process/capture/ProcessSampling.js +25 -2
  385. package/dist/process/capture/TerminalRenderer.js +14 -0
  386. package/dist/process/snapshotEnvironment.js +14 -0
  387. package/dist/server/EvidenceMcpServer.js +25 -14
  388. package/dist/server/createServer.js +49 -36
  389. package/dist/server/mcpClientMetadata.js +12 -5
  390. package/dist/server/promptCompletion.js +3 -8
  391. package/dist/server/registerAnalysisViewTool.js +15 -0
  392. package/dist/server/registerAndroidTools.js +2 -3
  393. package/dist/server/registerApplicationTools/compareExportShapes.js +4 -5
  394. package/dist/server/registerApplicationTools/compareSourceToBundle.js +4 -5
  395. package/dist/server/registerApplicationTools/compareVersions.js +4 -5
  396. package/dist/server/registerApplicationTools/coverage.js +1 -2
  397. package/dist/server/registerApplicationTools/helpers.js +1 -2
  398. package/dist/server/registerApplicationTools/obligationLedger.js +4 -5
  399. package/dist/server/registerApplicationTools/projectMobileApplicationGraph.js +3 -4
  400. package/dist/server/registerApplicationTools/traceFeature.js +4 -5
  401. package/dist/server/registerApplicationTools/traceSemantics.js +4 -5
  402. package/dist/server/registerArtifactComparisonTool.js +4 -5
  403. package/dist/server/registerBinaryDiagnosticsTools.js +2 -3
  404. package/dist/server/registerBrowserScenarioTool.js +3 -4
  405. package/dist/server/registerBrowserTools.js +13 -16
  406. package/dist/server/registerBundleComparisonTool.js +5 -6
  407. package/dist/server/registerCloseLifecycleTool.js +2 -3
  408. package/dist/server/registerElectronTools.js +10 -13
  409. package/dist/server/registerEnhancedTools.js +23 -23
  410. package/dist/server/registerEvidenceTools.js +3 -4
  411. package/dist/server/registerEvmTools.js +2 -3
  412. package/dist/server/registerFirmwareTools.js +2 -3
  413. package/dist/server/registerFunctionComparisonTool.js +7 -8
  414. package/dist/server/registerInvestigationTools.js +14 -15
  415. package/dist/server/registerJavaScriptRecoveryTool.js +2 -3
  416. package/dist/server/registerJavaScriptRuntimeObservationTools.js +6 -6
  417. package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +5 -6
  418. package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +4 -5
  419. package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +6 -7
  420. package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +6 -7
  421. package/dist/server/registerOfficialTools.js +4 -19
  422. package/dist/server/registerProcessComparisonTool.js +8 -8
  423. package/dist/server/registerRecordedCrashTools.js +2 -3
  424. package/dist/server/registerSessionRecordTools.js +15 -19
  425. package/dist/server/registerSessionStatusTool.js +3 -4
  426. package/dist/server/registerSessionTools.js +12 -18
  427. package/dist/server/registerWebModuleTool.js +2 -3
  428. package/dist/server/registerWebNetworkCaptureTool.js +2 -3
  429. package/dist/server/registerWebRuntimeTools.js +4 -5
  430. package/dist/server/registerWebScriptTool.js +2 -3
  431. package/dist/server/registerWebSourceLocationTool.js +2 -3
  432. package/dist/server/toolResult.js +66 -94
  433. package/dist/server/toolResultEncoding.js +11 -10
  434. package/dist/windows/WindowsNativeLoader.js +1 -0
  435. package/dist/windows/WindowsOwnedProcess.js +60 -15
  436. package/dist/windows/WindowsPrivateRuntime.js +7 -8
  437. package/native/windows/README.md +3 -1
  438. package/native/windows/build/manifest.json +2 -2
  439. package/native/windows/build/rea-windows-x64.node +0 -0
  440. package/package.json +39 -30
  441. package/scripts/rea.mjs +3 -6
  442. package/skills/reverse-engineer-anything/SKILL.md +9 -8
  443. package/skills/reverse-engineer-anything/references/android-applications.md +6 -3
  444. package/skills/reverse-engineer-anything/references/evidence-workflows.md +8 -4
  445. package/skills/reverse-engineer-anything/references/javascript-applications.md +16 -6
  446. package/skills/reverse-engineer-anything/references/native-and-artifacts.md +9 -0
  447. package/dist/config.js +0 -1
  448. package/dist/contracts/browserCaptureToolInputSchema.js +0 -43
  449. package/dist/contracts/process/processCaptureExample.js +0 -2
  450. package/dist/contracts/toolOutputSchemas.js +0 -2
  451. package/dist/main/reload.js +0 -12
  452. package/dist/main/state.js +0 -3
  453. package/dist/server/sessionToolPolicies.js +0 -2
@@ -1,5 +1,9 @@
1
1
  import { canonicalExportShapeValue, digestExportShapeValue, } from "./javascriptExportShapeComparisonIdentity.js";
2
2
  import { compareCodePoints, uniqueSorted } from "../canonicalOrdering.js";
3
+ const UNKNOWN_COVERAGE_PRESENCE = {
4
+ left: "unknown-coverage",
5
+ right: "unknown-coverage",
6
+ };
3
7
  /** Pair variants only through reciprocal unique exact literal discriminants. */
4
8
  export const pairJavaScriptExportShapeVariants = (left, right) => {
5
9
  const leftKeys = discriminantOccurrences(left);
@@ -61,12 +65,41 @@ export const buildJavaScriptExportShapeChanges = (input) => {
61
65
  });
62
66
  return [...paired, ...unpairedLeft, ...unpairedRight];
63
67
  };
68
+ /** List observed property names per retained variant, including unknown values. */
69
+ export const buildJavaScriptExportShapeInventories = (input) => {
70
+ const leftPairs = new Map(input.pairing.pairs.map((pair) => [pair.leftIndex, pair]));
71
+ const rightPairs = new Map(input.pairing.pairs.map((pair) => [pair.rightIndex, pair]));
72
+ return [
73
+ ...input.leftShapes.map((shape, index) => inventoryFor("left", index, shape, leftPairs.get(index))),
74
+ ...input.rightShapes.map((shape, index) => inventoryFor("right", index, shape, rightPairs.get(index))),
75
+ ];
76
+ };
77
+ const inventoryFor = (side, variantIndex, shape, pair) => ({
78
+ side,
79
+ variant_index: variantIndex,
80
+ discriminant: pair?.discriminant ?? null,
81
+ paired: pair !== undefined,
82
+ source_range: shape.source_range,
83
+ properties: uniqueSorted([
84
+ ...shape.fields
85
+ .filter((field) => fieldPresence(shape, field, field.path) === "present")
86
+ .map(({ path }) => path),
87
+ ...shape.property_coverage.map(({ path }) => path),
88
+ ]).filter((path) => path !== ""),
89
+ property_coverage: shape.property_coverage.map(({ path, status }) => ({
90
+ path,
91
+ status,
92
+ })),
93
+ });
64
94
  /** Report whether any retained shape lacks complete property coverage. */
65
- export const hasPartialJavaScriptExportPropertyCoverage = (shapes) => shapes.some((shape) => shape.property_coverage.some(({ status }) => status === "partial"));
95
+ export const hasPartialJavaScriptExportPropertyCoverage = (shapes) => shapes.some((shape) => shape.property_coverage.some(({ status }) => status === "partial") ||
96
+ shape.fields.some((field) => fieldPresence(shape, field, field.path) === "unknown-coverage"));
66
97
  const discriminantOccurrences = (shapes) => {
67
98
  const output = new Map();
68
99
  shapes.forEach((shape, index) => {
69
100
  for (const field of shape.fields) {
101
+ if (fieldPresence(shape, field, field.path) !== "present")
102
+ continue;
70
103
  const value = literalValue(field);
71
104
  if (!value.found)
72
105
  continue;
@@ -111,6 +144,7 @@ const selectionUnknownChange = (input) => changeWithId({
111
144
  status: "unknown",
112
145
  path: "",
113
146
  discriminant: null,
147
+ presence: UNKNOWN_COVERAGE_PRESENCE,
114
148
  left: selectionAvailability(input.leftSelection.selection, "left"),
115
149
  right: selectionAvailability(input.rightSelection.selection, "right"),
116
150
  left_source_range: null,
@@ -124,6 +158,7 @@ const emptyShapeUnknownChange = (input) => changeWithId({
124
158
  status: "unknown",
125
159
  path: "",
126
160
  discriminant: null,
161
+ presence: UNKNOWN_COVERAGE_PRESENCE,
127
162
  left: emptyShapeAvailability(input.leftShapes, "left"),
128
163
  right: emptyShapeAvailability(input.rightShapes, "right"),
129
164
  left_source_range: null,
@@ -159,6 +194,10 @@ const diffPair = (left, right, discriminant, evidenceLinks) => {
159
194
  status,
160
195
  path,
161
196
  discriminant,
197
+ presence: {
198
+ left: fieldPresence(left, leftField, path),
199
+ right: fieldPresence(right, rightField, path),
200
+ },
162
201
  left: fieldAvailability(leftField),
163
202
  right: fieldAvailability(rightField),
164
203
  left_source_range: left.source_range,
@@ -181,29 +220,42 @@ const fieldAtPath = (shape, fields, path) => {
181
220
  return undefined;
182
221
  return {
183
222
  path,
223
+ presence: "present",
184
224
  state: "unknown",
185
225
  value: null,
186
226
  reason: "A static container is retained at this path, but no primitive field value is projected.",
187
227
  };
188
228
  };
189
229
  const fieldChangeStatus = ({ leftShape, rightShape, path, leftField, rightField, }) => {
190
- if (leftField !== undefined && rightField !== undefined) {
191
- if (canonicalExportShapeValue(leftField) ===
230
+ const leftPresence = fieldPresence(leftShape, leftField, path);
231
+ const rightPresence = fieldPresence(rightShape, rightField, path);
232
+ if (leftField !== undefined &&
233
+ rightField !== undefined &&
234
+ canonicalExportShapeValue(leftField) ===
192
235
  canonicalExportShapeValue(rightField))
193
- return null;
236
+ return null;
237
+ if (leftPresence === "absent" && rightPresence === "absent")
238
+ return null;
239
+ if (leftPresence === "unknown-coverage" ||
240
+ rightPresence === "unknown-coverage")
241
+ return "unknown";
242
+ if (leftPresence === "absent")
243
+ return "added";
244
+ if (rightPresence === "absent")
245
+ return "removed";
246
+ if (leftField !== undefined && rightField !== undefined) {
194
247
  return leftField.state === "unknown" || rightField.state === "unknown"
195
248
  ? "unknown"
196
249
  : "changed";
197
250
  }
198
- const present = leftField ?? rightField;
199
- if (present === undefined)
200
- return null;
201
- const parent = parentPointer(path);
202
- const parentsComplete = propertyCoverageComplete(leftShape, parent) &&
203
- propertyCoverageComplete(rightShape, parent);
204
- if (present.state === "unknown" || !parentsComplete)
205
- return "unknown";
206
- return leftField === undefined ? "added" : "removed";
251
+ return null;
252
+ };
253
+ const fieldPresence = (shape, field, path) => {
254
+ if (field !== undefined)
255
+ return field.presence;
256
+ return propertyCoverageComplete(shape, parentPointer(path))
257
+ ? "absent"
258
+ : "unknown-coverage";
207
259
  };
208
260
  const propertyCoverageComplete = (shape, path) => path !== null &&
209
261
  shape.property_coverage.some((coverage) => coverage.path === path && coverage.status === "complete");
@@ -214,7 +266,7 @@ const parentPointer = (path) => {
214
266
  return separator < 0 ? null : path.slice(0, separator);
215
267
  };
216
268
  const fieldAvailability = (field) => {
217
- if (field === undefined)
269
+ if (field === undefined || field.presence === "absent")
218
270
  return { availability: "absent" };
219
271
  if (field.state === "unknown")
220
272
  return {
@@ -245,6 +297,7 @@ const unpairedChange = (side, shape, evidenceLinks) => changeWithId({
245
297
  status: "unknown",
246
298
  path: "",
247
299
  discriminant: null,
300
+ presence: UNKNOWN_COVERAGE_PRESENCE,
248
301
  left: {
249
302
  availability: "unknown",
250
303
  reason: side === "left"
@@ -62,6 +62,16 @@ const candidateFields = (node, seedKind) => {
62
62
  value: observation.label,
63
63
  },
64
64
  ]),
65
+ ...(observation.source_map_reference !== null &&
66
+ observation.source_map_reference.resolution.kind !== "unresolved"
67
+ ? [
68
+ {
69
+ basis: "property",
70
+ field: `observations[${String(index)}].source_map_reference.resolution.path`,
71
+ value: observation.source_map_reference.resolution.path,
72
+ },
73
+ ]
74
+ : []),
65
75
  ...propertyFields(observation.properties, `observations[${String(index)}].properties`),
66
76
  ]),
67
77
  ];
@@ -89,6 +99,7 @@ const relevantFields = {
89
99
  ".path",
90
100
  ".source",
91
101
  ".original_source",
102
+ ".source_root",
92
103
  ".exports",
93
104
  ],
94
105
  "native-export": [".label", ".key", ".requested_members", ".members"],
@@ -104,6 +115,15 @@ const identityFields = (node) => {
104
115
  field: "identity.original_source",
105
116
  value: identity.original_source,
106
117
  },
118
+ ...(identity.source_root === null
119
+ ? []
120
+ : [
121
+ {
122
+ basis: "identity",
123
+ field: "identity.source_root",
124
+ value: identity.source_root,
125
+ },
126
+ ]),
107
127
  ];
108
128
  if (identity.strategy === "canonical-path")
109
129
  return [
@@ -1,4 +1,3 @@
1
- import {} from "./javascriptApplicationGraph.js";
2
1
  import { compareCodePoints } from "../canonicalOrdering.js";
3
2
  /** Traverse a JAG without treating edge inference as observed reachability. */
4
3
  export const traverseApplicationFeature = (graph, seedNodeIds, direction) => {
@@ -1,5 +1,5 @@
1
1
  import { compareCodePoints } from "../canonicalOrdering.js";
2
- import {} from "./javascriptApplicationGraph.js";
2
+ import {} from "./javascriptApplicationGraphSchemas.js";
3
3
  /** Build provider-neutral addon targets and link exact-subject native Evidence. */
4
4
  export const buildJavaScriptNativeHandoffs = (nodes, edges, nativeEvidence) => {
5
5
  const nodeById = new Map(nodes.map((node) => [node.node_id, node]));
@@ -1,4 +1,3 @@
1
- import {} from "./javascriptApplicationGraph.js";
2
1
  import { uniqueSorted } from "../canonicalOrdering.js";
3
2
  import { createStaticRuntimeScope, mappedRuntimePaths, staticNodeWithinRuntimeScope, } from "./javascriptRuntimeStaticCandidates.js";
4
3
  /** Classify static code presence without claiming bundled module execution. */
@@ -77,8 +77,16 @@ const javascriptRuntimeScriptSchema = z.strictObject({
77
77
  location: javascriptRuntimeLocationSchema,
78
78
  execution_context_key: z.string().nullable(),
79
79
  cdp_hash: z.string().nullable(),
80
- length: z.number().int().min(0),
81
- is_module: z.boolean(),
80
+ length: z
81
+ .number()
82
+ .int()
83
+ .min(0)
84
+ .nullable()
85
+ .describe("Producer-reported script length; null when unavailable."),
86
+ is_module: z
87
+ .boolean()
88
+ .nullable()
89
+ .describe("Producer-reported module classification; null when unavailable."),
82
90
  status: z.literal("observed-loaded"),
83
91
  });
84
92
  const javascriptRuntimeContextSchema = z.strictObject({
@@ -1,4 +1,4 @@
1
- import { createJavaScriptApplicationEdge, } from "./javascriptApplicationGraph.js";
1
+ import { createJavaScriptApplicationEdge } from "./javascriptApplicationGraph.js";
2
2
  import { canonicalDigest } from "../comparisonSemantics.js";
3
3
  import { compareCodePoints } from "../canonicalOrdering.js";
4
4
  import { mappedRuntimePaths, } from "./javascriptRuntimeStaticCandidates.js";
@@ -1,5 +1,6 @@
1
1
  import { z } from "zod";
2
- import { browserAllowedOriginsSchema, browserEndpointSchema, webPageInspectionSchema, } from "../browserObservation.js";
2
+ import { browserAllowedOriginsSchema, browserEndpointSchema, } from "../browserObservation.js";
3
+ import { webPageInspectionSchema, } from "../browserObservationSchemas.js";
3
4
  import { classifyBrowserCompleteness, } from "../browserCompleteness.js";
4
5
  import { electronPageInspectionSchema, } from "./electronObservation.js";
5
6
  import { javascriptRuntimeObservationSchema, javascriptRuntimeKindSchema, } from "./javascriptRuntimeObservation.js";
@@ -160,7 +161,7 @@ const normalizeV8Inspection = (result) => ({
160
161
  script_key: script.script_key,
161
162
  frame_id: script.execution_context_key,
162
163
  ...runtimeLocation(script.location),
163
- cdp_hash: script.cdp_hash ?? "",
164
+ cdp_hash: script.cdp_hash,
164
165
  length: script.length,
165
166
  is_module: script.is_module,
166
167
  language: null,
@@ -1,5 +1,4 @@
1
1
  import { posix, relative, win32 } from "node:path";
2
- import {} from "./javascriptApplicationGraph.js";
3
2
  import { compareCodePoints, uniqueSorted } from "../canonicalOrdering.js";
4
3
  /** Index statically reconstructed entities that can receive runtime matches. */
5
4
  export const collectStaticRuntimeCandidates = (layers) => layers
@@ -1,12 +1,14 @@
1
1
  import * as t from "@babel/types";
2
2
  import { failedJavaScriptSemanticIr, } from "./javascriptSemanticIr.js";
3
- import { collectSemanticModuleLink, collectSemanticCallable, collectSemanticReferences, immutableSemanticBindings, immutableSemanticScopes, semanticStaticPropertyKey, } from "./javascriptSemanticProjection.js";
3
+ import { collectSemanticModuleLink, collectSemanticCallable, collectSemanticReferences, immutableSemanticBindings, immutableSemanticScopes, } from "./javascriptSemanticProjection.js";
4
+ import { semanticStaticPropertyKey } from "./javascriptAstValues.js";
4
5
  import { currentSemanticScope, resolveSemanticBindingState, semanticResolutionBlocked, resolveSemanticBindingFromScope, semanticScopeId, semanticVariableScope, } from "./javascriptSemanticState.js";
5
6
  import { traverseJavaScriptAst } from "./javascriptSemanticTraversal.js";
6
7
  import { collectSemanticMemberMutations } from "./javascriptSemanticMemberMutations.js";
7
8
  import { collectSemanticReturns, resolveSemanticModuleCallables, } from "./javascriptSemanticReturns.js";
8
9
  import { collectJavaScriptDerivedSemantics } from "./javascriptSemanticDerivedAnalysis.js";
9
- import { propertyName, range } from "./javascriptStaticAnalysisHelpers.js";
10
+ import { range } from "./javascriptStaticAnalysisHelpers.js";
11
+ import { propertyName } from "./javascriptAstValues.js";
10
12
  import { semanticCoverage } from "./javascriptSemanticCoverage.js";
11
13
  import { semanticResourceLimitsIn } from "./javascriptSemanticResourceLimits.js";
12
14
  import { parseJavaScriptSource, } from "./javascriptSourceParser.js";
@@ -279,7 +281,11 @@ const bindInnerDeclaration = (node, parent, scope, state) => {
279
281
  });
280
282
  else if (t.isAssignmentExpression(node)) {
281
283
  if (t.isIdentifier(node.left))
282
- addAssignment(node.left, node.right, scope, state);
284
+ addAssignment(node.left, node.operator === "=" ||
285
+ node.operator === "||=" ||
286
+ node.operator === "??="
287
+ ? node.right
288
+ : node, scope, state);
283
289
  else
284
290
  for (const identifier of assignedPatternIdentifiers(node.left))
285
291
  addAssignment(identifier, node, scope, state);
@@ -1,6 +1,7 @@
1
1
  import * as t from "@babel/types";
2
2
  import { semanticBuiltinNamespacePath } from "./javascriptSemanticProvenance.js";
3
- import { semanticCallableIdForNode, semanticStaticPropertyName, } from "./javascriptSemanticProjection.js";
3
+ import { semanticCallableIdForNode } from "./javascriptSemanticProjection.js";
4
+ import { semanticStaticPropertyName } from "./javascriptAstValues.js";
4
5
  import { resolveSemanticBindingState, semanticResolutionBlocked, } from "./javascriptSemanticState.js";
5
6
  import { traverseJavaScriptAst } from "./javascriptSemanticTraversal.js";
6
7
  import { range } from "./javascriptStaticAnalysisHelpers.js";
@@ -1,5 +1,6 @@
1
1
  import * as t from "@babel/types";
2
- import { semanticCallableIdForNode, semanticReferenceRole, semanticStaticPropertyKey, } from "./javascriptSemanticProjection.js";
2
+ import { semanticCallableIdForNode, semanticReferenceRole, } from "./javascriptSemanticProjection.js";
3
+ import { semanticStaticPropertyKey } from "./javascriptAstValues.js";
3
4
  import { resolveSemanticBindingState, isUnshadowedGlobal, } from "./javascriptSemanticState.js";
4
5
  import { parameterBindings, resolveLocalCallables, } from "./javascriptSemanticCallResolution.js";
5
6
  import { traverseJavaScriptAst } from "./javascriptSemanticTraversal.js";
@@ -1,6 +1,7 @@
1
1
  import * as t from "@babel/types";
2
2
  import { semanticBuiltinNamespacePath } from "./javascriptSemanticProvenance.js";
3
- import { semanticCallableIdForNode, semanticStaticPropertyName, } from "./javascriptSemanticProjection.js";
3
+ import { semanticCallableIdForNode } from "./javascriptSemanticProjection.js";
4
+ import { semanticStaticPropertyName } from "./javascriptAstValues.js";
4
5
  import { resolveSemanticBindingState, } from "./javascriptSemanticState.js";
5
6
  import { compareCodePoints } from "../canonicalOrdering.js";
6
7
  import { traverseJavaScriptAst } from "./javascriptSemanticTraversal.js";
@@ -1,7 +1,7 @@
1
1
  import * as t from "@babel/types";
2
2
  import { semanticBuiltinNamespacePath } from "./javascriptSemanticProvenance.js";
3
3
  import { compareCodePoints } from "../canonicalOrdering.js";
4
- import { semanticStaticPropertyKey, semanticStaticPropertyName, } from "./javascriptSemanticProjection.js";
4
+ import { semanticStaticPropertyKey, semanticStaticPropertyName, } from "./javascriptAstValues.js";
5
5
  import { resolveSemanticBindingState, semanticResolutionBlocked, } from "./javascriptSemanticState.js";
6
6
  import { builtinDataEffectMethod as builtinMethod, dataEffectArgumentBindingId as argumentBindingId, dataEffectLiteralString as literalString, dataEffectMemberCallee as memberCallee, dataEffectMemberObject as memberObject, dataEffectPrimitive as primitiveValue, isSemanticProcessObject as isProcessObject, outerDataEffectBinding as outerAssignedBinding, assignedSemanticResultBindings, semanticProjectedBindingFacts, traverseDataEffects as traverseWithContext, } from "./javascriptSemanticDataEffectHelpers.js";
7
7
  import { range } from "./javascriptStaticAnalysisHelpers.js";
@@ -1,6 +1,7 @@
1
1
  import { z } from "zod";
2
2
  import { canonicalDigest, canonicalJson } from "../comparisonSemantics.js";
3
3
  import { compareCodePoints, uniqueSorted } from "../canonicalOrdering.js";
4
+ import { canonicalJsonDigestSteps } from "../canonicalJsonDigestSteps.js";
4
5
  import { freezeOwnedJsonSnapshotSteps } from "../immutableJson.js";
5
6
  import { JAVASCRIPT_SEMANTIC_RELATION_FAMILIES, JAVASCRIPT_SEMANTIC_RELATION_FAMILY, javaScriptSemanticFingerprintInputSchema, javaScriptSemanticFingerprintSchema, javaScriptSemanticGraphInputSchema, javaScriptSemanticGraphRecordSchema, javaScriptSemanticNodeInputSchema, javaScriptSemanticNodeSchema, javaScriptSemanticRelationInputSchema, javaScriptSemanticRelationSchema, javaScriptSemanticUnknownInputSchema, javaScriptSemanticUnknownSchema, } from "./javascriptSemanticGraphSchemas.js";
6
7
  const normalizeEvidence = (evidence) => ({
@@ -96,7 +97,7 @@ const sortedUniqueIssue = (values, path, label, context) => {
96
97
  return;
97
98
  }
98
99
  };
99
- const checkCoverage = (graph, context) => {
100
+ function* checkCoverageSteps(graph, context) {
100
101
  const families = graph.coverage.families.map(({ family }) => family);
101
102
  if (canonicalJson(families, "JavaScript semantic graph") !==
102
103
  canonicalJson(JAVASCRIPT_SEMANTIC_RELATION_FAMILIES, "JavaScript semantic graph"))
@@ -122,11 +123,18 @@ const checkCoverage = (graph, context) => {
122
123
  message: "Truncated graph coverage must identify an effective limit",
123
124
  });
124
125
  const relationsByFamily = new Map(JAVASCRIPT_SEMANTIC_RELATION_FAMILIES.map((family) => [family, 0]));
125
- for (const relation of graph.relations) {
126
+ for (const [index, relation] of graph.relations.entries()) {
127
+ if (index % 256 === 0)
128
+ yield;
126
129
  const family = JAVASCRIPT_SEMANTIC_RELATION_FAMILY[relation.relation];
127
130
  relationsByFamily.set(family, (relationsByFamily.get(family) ?? 0) + 1);
128
131
  }
129
- const unknownsById = new Map(graph.unknowns.map((unknown) => [unknown.unknown_id, unknown]));
132
+ const unknownsById = new Map();
133
+ for (const [index, unknown] of graph.unknowns.entries()) {
134
+ if (index % 256 === 0)
135
+ yield;
136
+ unknownsById.set(unknown.unknown_id, unknown);
137
+ }
130
138
  for (const [index, family] of graph.coverage.families.entries()) {
131
139
  if (family.retained_relations !== relationsByFamily.get(family.family))
132
140
  context.addIssue({
@@ -148,7 +156,7 @@ const checkCoverage = (graph, context) => {
148
156
  message: "Complete family coverage cannot omit or retain unknown facts",
149
157
  });
150
158
  }
151
- };
159
+ }
152
160
  const checkCanonicalOrder = (graph, context) => {
153
161
  sortedUniqueIssue(graph.root_node_ids, ["root_node_ids"], "Root nodes", context);
154
162
  sortedUniqueIssue(graph.nodes.map(({ node_id }) => node_id), ["nodes"], "Nodes", context);
@@ -157,8 +165,10 @@ const checkCanonicalOrder = (graph, context) => {
157
165
  sortedUniqueIssue(graph.unknowns.map(({ unknown_id }) => unknown_id), ["unknowns"], "Unknown frontiers", context);
158
166
  sortedUniqueIssue(graph.limitations, ["limitations"], "Limitations", context);
159
167
  };
160
- const checkNodes = (graph, nodes, context) => {
168
+ function* checkNodesSteps(graph, nodes, context) {
161
169
  for (const [index, node] of graph.nodes.entries()) {
170
+ if (index % 256 === 0)
171
+ yield;
162
172
  if (node.node_id !== javaScriptSemanticNodeId(node))
163
173
  context.addIssue({
164
174
  code: "custom",
@@ -173,18 +183,23 @@ const checkNodes = (graph, nodes, context) => {
173
183
  message: "Function owner must name a function node",
174
184
  });
175
185
  }
176
- };
177
- const checkRoots = (graph, nodes, context) => {
178
- for (const root of graph.root_node_ids)
186
+ }
187
+ function* checkRootsSteps(graph, nodes, context) {
188
+ for (const [index, root] of graph.root_node_ids.entries()) {
189
+ if (index % 256 === 0)
190
+ yield;
179
191
  if (!nodes.has(root))
180
192
  context.addIssue({
181
193
  code: "custom",
182
194
  path: ["root_node_ids"],
183
195
  message: "Root identifier must name a semantic node",
184
196
  });
185
- };
186
- const checkRelations = (graph, nodes, context) => {
197
+ }
198
+ }
199
+ function* checkRelationsSteps(graph, nodes, context) {
187
200
  for (const [index, relation] of graph.relations.entries()) {
201
+ if (index % 256 === 0)
202
+ yield;
188
203
  const { relation_id: identifier, ...semantic } = relation;
189
204
  if (identifier !==
190
205
  "jsrg_relation_" + canonicalDigest(semantic, "JavaScript semantic graph"))
@@ -214,9 +229,11 @@ const checkRelations = (graph, nodes, context) => {
214
229
  message: "Candidate relations cannot claim observed resolution",
215
230
  });
216
231
  }
217
- };
218
- const checkUnknowns = (graph, nodes, context) => {
232
+ }
233
+ function* checkUnknownsSteps(graph, nodes, context) {
219
234
  for (const [index, unknown] of graph.unknowns.entries()) {
235
+ if (index % 256 === 0)
236
+ yield;
220
237
  const { unknown_id: identifier, ...semantic } = unknown;
221
238
  if (identifier !==
222
239
  "jsrg_unknown_" + canonicalDigest(semantic, "JavaScript semantic graph"))
@@ -250,7 +267,7 @@ const checkUnknowns = (graph, nodes, context) => {
250
267
  message: "Unknown frontiers require unknown or unavailable evidence",
251
268
  });
252
269
  }
253
- };
270
+ }
254
271
  const checkUnknownReferences = (graph, context) => {
255
272
  const unknownIds = new Set(graph.unknowns.map(({ unknown_id }) => unknown_id));
256
273
  for (const [index, family] of graph.coverage.families.entries())
@@ -261,8 +278,10 @@ const checkUnknownReferences = (graph, context) => {
261
278
  message: "Family coverage references an absent unknown frontier",
262
279
  });
263
280
  };
264
- const checkFingerprints = (graph, nodes, context) => {
281
+ function* checkFingerprintsSteps(graph, nodes, context) {
265
282
  for (const [index, fingerprint] of graph.fingerprints.entries()) {
283
+ if (index % 256 === 0)
284
+ yield;
266
285
  if (nodes.get(fingerprint.function_node_id)?.kind !== "function")
267
286
  context.addIssue({
268
287
  code: "custom",
@@ -296,23 +315,34 @@ const checkFingerprints = (graph, nodes, context) => {
296
315
  message: "Incomplete fingerprints require a limitation",
297
316
  });
298
317
  }
299
- };
300
- const checkGraphContent = (graph, context) => {
318
+ }
319
+ function* checkGraphContentSteps(graph, context) {
301
320
  checkCanonicalOrder(graph, context);
302
- const nodes = new Map(graph.nodes.map((node) => [node.node_id, node]));
303
- checkNodes(graph, nodes, context);
304
- checkRoots(graph, nodes, context);
305
- checkRelations(graph, nodes, context);
306
- checkUnknowns(graph, nodes, context);
321
+ const nodes = new Map();
322
+ for (const [index, node] of graph.nodes.entries()) {
323
+ if (index % 256 === 0)
324
+ yield;
325
+ nodes.set(node.node_id, node);
326
+ }
327
+ yield* checkNodesSteps(graph, nodes, context);
328
+ yield* checkRootsSteps(graph, nodes, context);
329
+ yield* checkRelationsSteps(graph, nodes, context);
330
+ yield* checkUnknownsSteps(graph, nodes, context);
307
331
  checkUnknownReferences(graph, context);
308
- checkFingerprints(graph, nodes, context);
309
- checkCoverage(graph, context);
332
+ yield* checkFingerprintsSteps(graph, nodes, context);
333
+ yield* checkCoverageSteps(graph, context);
310
334
  if (graph.coverage.status !== "complete" && graph.limitations.length === 0)
311
335
  context.addIssue({
312
336
  code: "custom",
313
337
  path: ["limitations"],
314
338
  message: "Non-complete graph coverage requires a limitation",
315
339
  });
340
+ }
341
+ const checkGraphContent = (graph, context) => {
342
+ const steps = checkGraphContentSteps(graph, context);
343
+ while (!steps.next().done) {
344
+ // Synchronous callers apply the same integrity checks without scheduling.
345
+ }
316
346
  };
317
347
  const checkGraph = (graph, context) => {
318
348
  checkGraphContent(graph, context);
@@ -327,28 +357,28 @@ const checkGraph = (graph, context) => {
327
357
  };
328
358
  /** Strict semantic graph schema with verified canonical commitments. */
329
359
  export const javaScriptSemanticGraphSchema = javaScriptSemanticGraphRecordSchema.superRefine(checkGraph);
360
+ const normalizeGraphInput = (parsed) => ({
361
+ ...parsed,
362
+ root_node_ids: uniqueSorted(parsed.root_node_ids),
363
+ nodes: [...parsed.nodes].sort((left, right) => compareCodePoints(left.node_id, right.node_id)),
364
+ relations: [...parsed.relations].sort((left, right) => compareCodePoints(left.relation_id, right.relation_id)),
365
+ fingerprints: [...parsed.fingerprints].sort((left, right) => compareCodePoints(left.fingerprint_id, right.fingerprint_id)),
366
+ unknowns: [...parsed.unknowns].sort((left, right) => compareCodePoints(left.unknown_id, right.unknown_id)),
367
+ coverage: {
368
+ ...parsed.coverage,
369
+ limits: [...parsed.coverage.limits].sort((left, right) => compareCodePoints(canonicalJson(left, "JavaScript semantic graph"), canonicalJson(right, "JavaScript semantic graph"))),
370
+ families: [...parsed.coverage.families]
371
+ .map((family) => ({
372
+ ...family,
373
+ unknown_ids: uniqueSorted(family.unknown_ids),
374
+ }))
375
+ .sort((left, right) => compareCodePoints(left.family, right.family)),
376
+ },
377
+ limitations: uniqueSorted(parsed.limitations),
378
+ });
330
379
  /** Normalize a complete companion graph and derive its graph ID. */
331
380
  export const createJavaScriptSemanticGraph = (input) => {
332
- const parsed = javaScriptSemanticGraphInputSchema.parse(input);
333
- const semantic = {
334
- ...parsed,
335
- root_node_ids: uniqueSorted(parsed.root_node_ids),
336
- nodes: [...parsed.nodes].sort((left, right) => compareCodePoints(left.node_id, right.node_id)),
337
- relations: [...parsed.relations].sort((left, right) => compareCodePoints(left.relation_id, right.relation_id)),
338
- fingerprints: [...parsed.fingerprints].sort((left, right) => compareCodePoints(left.fingerprint_id, right.fingerprint_id)),
339
- unknowns: [...parsed.unknowns].sort((left, right) => compareCodePoints(left.unknown_id, right.unknown_id)),
340
- coverage: {
341
- ...parsed.coverage,
342
- limits: [...parsed.coverage.limits].sort((left, right) => compareCodePoints(canonicalJson(left, "JavaScript semantic graph"), canonicalJson(right, "JavaScript semantic graph"))),
343
- families: [...parsed.coverage.families]
344
- .map((family) => ({
345
- ...family,
346
- unknown_ids: uniqueSorted(family.unknown_ids),
347
- }))
348
- .sort((left, right) => compareCodePoints(left.family, right.family)),
349
- },
350
- limitations: uniqueSorted(parsed.limitations),
351
- };
381
+ const semantic = normalizeGraphInput(javaScriptSemanticGraphInputSchema.parse(input));
352
382
  // The input schema already cloned and validated every field. Validate the
353
383
  // normalized relationships in place, then derive the only added field. The
354
384
  // public schema still verifies arbitrary records and their commitments.
@@ -367,9 +397,21 @@ export const createJavaScriptSemanticGraph = (input) => {
367
397
  return record;
368
398
  };
369
399
  const validatedImmutableSemanticGraphs = new WeakSet();
370
- /** Clone and validate synchronously, then return steps to seal the owned graph. */
371
- export const createImmutableJavaScriptSemanticGraphSteps = (input) => sealValidatedSemanticGraphSteps(createJavaScriptSemanticGraph(input));
372
- function* sealValidatedSemanticGraphSteps(graph) {
400
+ /** Clone input synchronously; commit, check and seal the owned graph in steps. */
401
+ export const createImmutableJavaScriptSemanticGraphSteps = (input) => validateAndSealSemanticGraphSteps(normalizeGraphInput(javaScriptSemanticGraphInputSchema.parse(input)));
402
+ function* validateAndSealSemanticGraphSteps(semantic) {
403
+ const graph = {
404
+ ...semantic,
405
+ graph_id: `jsrg_${yield* canonicalJsonDigestSteps(semantic)}`,
406
+ };
407
+ const issues = [];
408
+ yield* checkGraphContentSteps(graph, {
409
+ addIssue: (issue) => {
410
+ issues.push(issue);
411
+ },
412
+ });
413
+ if (issues.length > 0)
414
+ throw new z.ZodError(issues);
373
415
  yield* freezeOwnedJsonSnapshotSteps(graph);
374
416
  validatedImmutableSemanticGraphs.add(graph);
375
417
  return graph;