rea-agents 6.0.0 → 6.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (611) hide show
  1. package/README.md +26 -18
  2. package/bridge/android/ReaJadxBridge.java +14 -5
  3. package/bridge/ghidra/ReaGhidraBridge.java +205 -51
  4. package/bridge/hopper_bridge.py +314 -127
  5. package/bridge/mitmproxy/capture.py +0 -2
  6. package/bridge/native/rea_lldb_tracer.py +630 -94
  7. package/bridge/process/ProcessRunTokenReader.swift +39 -5
  8. package/bridge/pwntools/recorded_crash_impl.py +4 -0
  9. package/dist/android/JadxConfiguration.js +274 -31
  10. package/dist/android/JadxMcpTransport.js +18 -2
  11. package/dist/android/JadxProtocol.js +6 -0
  12. package/dist/android/JadxProvider.js +76 -37
  13. package/dist/android/JadxSession.js +23 -4
  14. package/dist/application/AnalysisContextQueries.js +8 -35
  15. package/dist/application/AnalysisDocument.js +32 -0
  16. package/dist/application/AppBundleExecutable.js +67 -21
  17. package/dist/application/BinaryTargetResolver.js +5 -3
  18. package/dist/application/BrowserEvidence.js +3 -8
  19. package/dist/application/BrowserScenarioEvidence.js +2 -18
  20. package/dist/application/CallPathTracing.js +19 -3
  21. package/dist/application/CapabilityInventory.js +48 -11
  22. package/dist/application/ClientConfigurationDocument.js +917 -8
  23. package/dist/application/ClientRegistrationIdentity.js +26 -5
  24. package/dist/application/ClientRegistrationStatus.js +29 -14
  25. package/dist/application/DirectAnalysis.js +56 -51
  26. package/dist/application/DirectAnalysisCleanup.js +72 -0
  27. package/dist/application/DirectAnalysisStatus.js +4 -5
  28. package/dist/application/Doctor.js +19 -21
  29. package/dist/application/DoctorDiagnostics.js +1 -2
  30. package/dist/application/DoctorScope.js +25 -13
  31. package/dist/application/EnhancedLiteralTracing.js +22 -25
  32. package/dist/application/EnhancedTools.js +64 -17
  33. package/dist/application/EvidenceBundleFiles.js +30 -13
  34. package/dist/application/FunctionAnalysisEvidence.js +2 -3
  35. package/dist/application/InventoryProjectionEvidence.js +4 -3
  36. package/dist/application/InvestigationProviders.js +11 -2
  37. package/dist/application/JsonFiles.js +83 -28
  38. package/dist/application/LinuxHopper.js +9 -6
  39. package/dist/application/MacHopper.js +15 -18
  40. package/dist/application/ProcedureAddressResolution.js +11 -0
  41. package/dist/application/RealHopperAssertions.js +0 -11
  42. package/dist/application/ReconstructionCoverageService.js +7 -4
  43. package/dist/application/ReconstructionObligationCandidates.js +1 -1
  44. package/dist/application/ReconstructionObligationLedgerService.js +4 -3
  45. package/dist/application/ReferenceSourceImportEntries.js +1 -1
  46. package/dist/application/Setup.js +21 -17
  47. package/dist/application/SetupClientConfiguration.js +10 -15
  48. package/dist/application/SetupHost.js +21 -29
  49. package/dist/application/SetupPlan.js +11 -9
  50. package/dist/application/SupportedClients.js +34 -1
  51. package/dist/application/Uninstall.js +82 -29
  52. package/dist/application/Update.js +18 -3
  53. package/dist/application/UpdateMaintenance.js +7 -5
  54. package/dist/application/UpdateRuntime.js +57 -36
  55. package/dist/application/WebModuleTraceService.js +4 -2
  56. package/dist/application/WebNetworkCaptureService.js +4 -2
  57. package/dist/application/WebRuntimeService.js +5 -3
  58. package/dist/application/WebScriptExportService.js +32 -6
  59. package/dist/application/WebSourceLocationService.js +4 -2
  60. package/dist/application/WorkflowEvidence.js +105 -0
  61. package/dist/application/XrefsAddressResolution.js +45 -0
  62. package/dist/application/analysisView/AnalysisViewService.js +76 -0
  63. package/dist/application/binary/AnalysisClientCleanup.js +30 -5
  64. package/dist/application/binary/AnalysisProviderEvaluation.js +22 -7
  65. package/dist/application/binary/AnalysisProviderRegistry.js +4 -6
  66. package/dist/application/binary/AnalysisSnapshotCache.js +13 -14
  67. package/dist/application/binary/BinarySession.js +161 -93
  68. package/dist/application/binary/BinarySessionComposition.js +1 -3
  69. package/dist/application/binary/BinarySessionExecution.js +3 -5
  70. package/dist/application/binary/BinarySessionOpen.js +4 -4
  71. package/dist/application/binary/BinarySessionRecords.js +26 -4
  72. package/dist/application/binary/BinarySessionStatus.js +18 -7
  73. package/dist/application/binary/CompositeProvider.js +16 -17
  74. package/dist/application/binary/LazyAnalysisProvider.js +8 -5
  75. package/dist/application/binary/SessionProviderRouter.js +27 -135
  76. package/dist/application/binaryDiagnostics/BinaryLayoutService.js +4 -2
  77. package/dist/application/binaryDiagnostics/RecordedCrashService.js +4 -2
  78. package/dist/application/evm/EvmInterfaceService.js +4 -2
  79. package/dist/application/homebrew.js +48 -0
  80. package/dist/application/investigation/EvidenceLedger.js +21 -7
  81. package/dist/application/investigation/InvestigationRecords.js +8 -0
  82. package/dist/application/javascript/ElectronActiveEvidence.js +9 -13
  83. package/dist/application/javascript/JavaScriptAnalysisControl.js +34 -0
  84. package/dist/application/javascript/JavaScriptApplicationEvidence.js +21 -4
  85. package/dist/application/javascript/JavaScriptApplicationEvidenceGraph.js +19 -2
  86. package/dist/application/javascript/JavaScriptApplicationService.js +27 -15
  87. package/dist/application/javascript/JavaScriptApplicationWorkflowService.js +5 -5
  88. package/dist/application/javascript/JavaScriptArtifactAnalysis.js +10 -7
  89. package/dist/application/javascript/JavaScriptArtifactGraphBuilder.js +44 -10
  90. package/dist/application/javascript/JavaScriptArtifactGraphBundlers.js +11 -3
  91. package/dist/application/javascript/JavaScriptArtifactGraphContext.js +9 -0
  92. package/dist/application/javascript/JavaScriptArtifactGraphDocuments.js +8 -5
  93. package/dist/application/javascript/JavaScriptArtifactGraphFindings.js +12 -3
  94. package/dist/application/javascript/JavaScriptArtifactGraphStructure.js +0 -1
  95. package/dist/application/javascript/JavaScriptArtifactPathResolution.js +49 -19
  96. package/dist/application/javascript/JavaScriptArtifactReconstruction.js +56 -8
  97. package/dist/application/javascript/JavaScriptModuleRelationships.js +38 -9
  98. package/dist/application/javascript/JavaScriptRecoveryService.js +4 -2
  99. package/dist/application/javascript/JavaScriptRuntimeObservationService.js +6 -4
  100. package/dist/application/javascript/JavaScriptRuntimeReconciliationService.js +3 -3
  101. package/dist/application/javascript/JavaScriptSemanticGraphAsyncProjection.js +2 -3
  102. package/dist/application/javascript/JavaScriptSemanticGraphBuilder.js +63 -61
  103. package/dist/application/javascript/JavaScriptSemanticGraphChildProcessProjection.js +1 -2
  104. package/dist/application/javascript/JavaScriptSemanticGraphDataProjection.js +2 -3
  105. package/dist/application/javascript/JavaScriptSemanticGraphFlowProjection.js +1 -5
  106. package/dist/application/javascript/JavaScriptSemanticGraphObjectProjection.js +75 -46
  107. package/dist/application/javascript/JavaScriptSemanticGraphResourceProjection.js +2 -3
  108. package/dist/application/javascript/JavaScriptSemanticGraphValueProjection.js +64 -19
  109. package/dist/application/managed/ManagedApplicationGraphService.js +4 -3
  110. package/dist/application/managed/ManagedMemberComparisonService.js +9 -5
  111. package/dist/application/managed/ManagedNativeVerificationService.js +6 -4
  112. package/dist/application/managed/ManagedReconstructionService.js +4 -3
  113. package/dist/application/process/ProcessCli.js +25 -17
  114. package/dist/application/process/ProcessEvidence.js +4 -4
  115. package/dist/application/workflowInputError.js +18 -0
  116. package/dist/artifacts/ArtifactProvider.js +48 -13
  117. package/dist/artifacts/ArtifactReader.js +31 -0
  118. package/dist/artifacts/DirectoryArtifactReader.js +2 -1
  119. package/dist/artifacts/MachOSliceArtifactReader.js +106 -15
  120. package/dist/artifacts/NativeDmgArtifactReader.js +73 -21
  121. package/dist/artifacts/SafeOutputTree.js +16 -2
  122. package/dist/artifacts/ZipArtifactReader.js +11 -4
  123. package/dist/artifacts/apple/AppleAssetCatalogAnalysis.js +26 -5
  124. package/dist/artifacts/apple/DylibResolutionReader.js +17 -7
  125. package/dist/artifacts/apple/InterfaceBuilderAnalysis.js +176 -56
  126. package/dist/artifacts/apple/InterfaceBuilderDecodeBudget.js +195 -0
  127. package/dist/artifacts/apple/KeyedArchiveReader.js +55 -23
  128. package/dist/artifacts/apple/MachoLoadCommandReader.js +92 -31
  129. package/dist/artifacts/apple/NibArchive.js +81 -14
  130. package/dist/artifacts/apple/NibViewHierarchy.js +10 -3
  131. package/dist/artifacts/apple/PlistNumberLiterals.js +164 -0
  132. package/dist/artifacts/extraction/ArtifactExtraction.js +78 -21
  133. package/dist/artifacts/inventory/ArtifactGraphConstruction.js +79 -68
  134. package/dist/artifacts/inventory/ArtifactInventory.js +0 -1
  135. package/dist/artifacts/inventory/reader.js +3 -3
  136. package/dist/artifacts/inventory/scanCanonical.js +59 -38
  137. package/dist/artifacts/inventory/scanReader.js +5 -9
  138. package/dist/artifacts/javascript/JavaScriptArtifactFiles.js +6 -2
  139. package/dist/browser/BrowserScenarioPartialObservation.js +106 -0
  140. package/dist/browser/CdpBrowserProvider.js +2 -3
  141. package/dist/browser/CdpCaptureCompleteness.js +2 -0
  142. package/dist/browser/CdpCaptureEventHandlers.js +78 -15
  143. package/dist/browser/CdpCaptureEventTypes.js +5 -1
  144. package/dist/browser/CdpCaptureEvents.js +25 -1
  145. package/dist/browser/CdpCaptureValues.js +20 -0
  146. package/dist/browser/CdpConnection.js +30 -11
  147. package/dist/browser/CdpElectronProvider.js +0 -2
  148. package/dist/browser/CdpElectronScriptEvents.js +2 -8
  149. package/dist/browser/CdpElectronScripts.js +2 -3
  150. package/dist/browser/CdpOptionalCommand.js +2 -3
  151. package/dist/browser/CdpPageCapture.js +23 -1
  152. package/dist/browser/CdpPageCaptureScripts.js +2 -3
  153. package/dist/browser/CdpSafeMetadata.js +10 -10
  154. package/dist/browser/PlaywrightBrowserScenarioProvider.js +59 -44
  155. package/dist/browser/PlaywrightElectronActiveActions.js +34 -79
  156. package/dist/browser/PlaywrightElectronActiveProjection.js +141 -0
  157. package/dist/browser/PlaywrightElectronActiveProvider.js +133 -130
  158. package/dist/browser/PlaywrightScenarioArtifacts.js +1 -1
  159. package/dist/browser/PlaywrightScenarioBrowser.js +139 -39
  160. package/dist/browser/PlaywrightScenarioEvents.js +1 -1
  161. package/dist/browser/PlaywrightScenarioSession.js +39 -22
  162. package/dist/browser/WebSourceMapFetcher.js +426 -72
  163. package/dist/browser/assets/LocalWebScriptArtifacts.js +2 -2
  164. package/dist/browser/assets/ScriptCaptureAdapters.js +1 -1
  165. package/dist/browser/history/CaptureFailures.js +41 -1
  166. package/dist/browser/history/CaptureRelease.js +5 -0
  167. package/dist/browser/history/HarCaptureAdapter.js +3 -3
  168. package/dist/browser/history/HarJson.js +3 -2
  169. package/dist/browser/history/HistoricalCaptureDecoder.js +4 -2
  170. package/dist/browser/history/MitmproxyCaptureAdapter.js +4 -2
  171. package/dist/catalogIdentity.js +0 -1
  172. package/dist/cli/analysisSelector.js +23 -0
  173. package/dist/cli/analysisViewCommands.js +36 -0
  174. package/dist/cli/applicationCommands.js +2 -3
  175. package/dist/cli/artifactCommands.js +11 -12
  176. package/dist/cli/coreAnalysisCommands.js +3 -3
  177. package/dist/cli/coreBinaryCommands.js +100 -37
  178. package/dist/cli/coreNativeCommands.js +9 -10
  179. package/dist/cli/electronCommands.js +10 -9
  180. package/dist/cli/interactiveSetup.js +6 -6
  181. package/dist/cli/javascriptApplicationAnalysis.js +7 -3
  182. package/dist/cli/jsonOutput.js +4 -99
  183. package/dist/cli/managedCommands.js +7 -8
  184. package/dist/cli/nativeCallCommands.js +3 -5
  185. package/dist/cli/omittableDefaults.js +50 -0
  186. package/dist/cli/processCommands.js +3 -2
  187. package/dist/cli/setupCommands.js +16 -15
  188. package/dist/cli/utilityCommands.js +9 -9
  189. package/dist/cli/webRuntimeCommands.js +8 -8
  190. package/dist/cli.js +18 -9
  191. package/dist/cliBrowserScenarioCommands.js +2 -2
  192. package/dist/cliCommandNames.js +1 -1
  193. package/dist/cliJsonInput.js +24 -5
  194. package/dist/cliOutput.js +0 -38
  195. package/dist/composition/auxiliaryAnalysisProviders.js +27 -23
  196. package/dist/composition/binary.js +9 -9
  197. package/dist/composition/browserScenario.js +2 -1
  198. package/dist/composition/directAnalysis.js +20 -13
  199. package/dist/composition/electronScenario.js +1 -1
  200. package/dist/composition/optionalObservationProviders.js +12 -7
  201. package/dist/config/environment.js +10 -0
  202. package/dist/config/ghidraStartupTimeout.js +12 -0
  203. package/dist/config/homeDirectory.js +12 -0
  204. package/dist/config/mcpResponseBudget.js +30 -0
  205. package/dist/config/parseConfig.js +8 -3
  206. package/dist/config/parsers.js +19 -22
  207. package/dist/contracts/analysisViewToolContracts.js +56 -0
  208. package/dist/contracts/applicationToolContracts.js +5 -4
  209. package/dist/contracts/artifactComparisonExample.js +2 -2
  210. package/dist/contracts/artifactToolContracts.js +1 -1
  211. package/dist/contracts/browserScenarioToolContracts.js +1 -1
  212. package/dist/contracts/browserToolContracts.js +19 -15
  213. package/dist/contracts/enhancedInputs.js +7 -5
  214. package/dist/contracts/enhancedToolContracts.js +7 -6
  215. package/dist/contracts/evm/evmToolContracts.js +1 -1
  216. package/dist/contracts/functionWorkflowToolContracts.js +1 -1
  217. package/dist/contracts/hopperMemoryContracts.js +2 -5
  218. package/dist/contracts/inputSchemaPresentation.js +90 -0
  219. package/dist/contracts/investigationExamples.js +4 -3
  220. package/dist/contracts/javascript/electronToolContracts.js +2 -2
  221. package/dist/contracts/javascript/javascriptApplicationWorkflowExamples.js +0 -20
  222. package/dist/contracts/javascript/javascriptExportShapeComparisonExample.js +245 -0
  223. package/dist/contracts/javascript/javascriptRuntimeObservationToolContracts.js +1 -1
  224. package/dist/contracts/managed/managedToolContracts.js +7 -14
  225. package/dist/contracts/managed/managedWorkflowToolContracts.js +1 -1
  226. package/dist/contracts/mobileApplicationGraphExamples.js +3 -3
  227. package/dist/contracts/native/binaryDiagnosticsToolContracts.js +1 -1
  228. package/dist/contracts/native/nativeToolContracts.js +5 -3
  229. package/dist/contracts/officialToolContracts.js +16 -16
  230. package/dist/contracts/promptContracts.js +5 -5
  231. package/dist/contracts/providerSelection.js +1 -1
  232. package/dist/contracts/sessionLifecycleInputs.js +3 -7
  233. package/dist/contracts/sessionStatusContract.js +2 -4
  234. package/dist/contracts/sessionToolContracts.js +18 -8
  235. package/dist/contracts/sessionToolSchemas.js +3 -19
  236. package/dist/contracts/toolContractExamples.js +0 -1
  237. package/dist/contracts/toolContractHelpers.js +4 -1
  238. package/dist/contracts/toolContracts.js +2 -0
  239. package/dist/contracts/toolEffects.js +1 -1
  240. package/dist/contracts/toolOutputSchemaGroups.js +160 -115
  241. package/dist/contracts/toolOutputSchemaPrimitives.js +28 -20
  242. package/dist/contracts/toolSchemaMetadata.js +41 -33
  243. package/dist/contracts/webNetworkCaptureToolContracts.js +2 -2
  244. package/dist/contracts/webRuntimeToolContracts.js +1 -1
  245. package/dist/contracts/webScriptToolContracts.js +1 -1
  246. package/dist/doctorRuntime.js +7 -5
  247. package/dist/domain/analysisErrorBase.js +8 -3
  248. package/dist/domain/analysisErrorCore.js +6 -1
  249. package/dist/domain/analysisErrorPresentation.js +90 -20
  250. package/dist/domain/analysisErrorProjection.js +130 -32
  251. package/dist/domain/analysisSnapshot.js +29 -31
  252. package/dist/domain/analysisView/analysisView.js +243 -0
  253. package/dist/domain/analysisView/analysisViewCoverage.js +19 -0
  254. package/dist/domain/analysisView/binaryLayoutView.js +159 -0
  255. package/dist/domain/analysisView/javascriptApplicationView.js +238 -0
  256. package/dist/domain/android/androidAnalysis.js +2 -4
  257. package/dist/domain/android/androidApplication.js +18 -10
  258. package/dist/domain/apple/appleApplication.js +42 -15
  259. package/dist/domain/apple/dyldEnvironment.js +73 -0
  260. package/dist/domain/apple/dylibResolution.js +130 -12
  261. package/dist/domain/apple/dylibResolutionFindings.js +9 -7
  262. package/dist/domain/apple/interfaceBuilderGraph.js +25 -14
  263. package/dist/domain/apple/interfaceBuilderKeyedArchive.js +13 -3
  264. package/dist/domain/apple/keyedArchive.js +35 -3
  265. package/dist/domain/apple/machoContainer.js +54 -0
  266. package/dist/domain/apple/plistNumbers.js +76 -0
  267. package/dist/domain/artifactComparison.js +15 -6
  268. package/dist/domain/artifactGraph.js +16 -3
  269. package/dist/domain/artifactIdentity.js +29 -0
  270. package/dist/domain/artifactInventoryEvidence.js +28 -40
  271. package/dist/domain/artifactOperationError.js +3 -3
  272. package/dist/domain/artifactPartialObservation.js +1 -0
  273. package/dist/domain/artifactPathSyntax.js +49 -0
  274. package/dist/domain/binaryTarget.js +39 -13
  275. package/dist/domain/bridgeCandidateProjection.js +71 -0
  276. package/dist/domain/browserCaptureComparison.js +13 -49
  277. package/dist/domain/browserCompleteness.js +1 -0
  278. package/dist/domain/browserNetworkEvidence.js +10 -4
  279. package/dist/domain/browserObservation.js +0 -1
  280. package/dist/domain/browserObservationError.js +24 -5
  281. package/dist/domain/browserObservationSchemas.js +14 -3
  282. package/dist/domain/browserScenario.js +0 -1
  283. package/dist/domain/browserScenarioCapture.js +1 -2
  284. package/dist/domain/browserScenarioDiff.js +0 -2
  285. package/dist/domain/browserScenarioDiffEvidence.js +0 -12
  286. package/dist/domain/browserScenarioDiffValues.js +2 -2
  287. package/dist/domain/browserScenarioValues.js +5 -10
  288. package/dist/domain/bundleComparison.js +3 -2
  289. package/dist/domain/callPath.js +8 -9
  290. package/dist/domain/callPathSchemas.js +2 -2
  291. package/dist/domain/canonicalJsonDigestSteps.js +133 -0
  292. package/dist/domain/canonicalOrdering.js +9 -5
  293. package/dist/domain/changedBehavior.js +9 -9
  294. package/dist/domain/comparisonSourceEvidence.js +40 -0
  295. package/dist/domain/completionLedgerGeneration.js +2 -1
  296. package/dist/domain/configurationErrors.js +13 -1
  297. package/dist/domain/conformancePackage.js +4 -3
  298. package/dist/domain/evidence.js +65 -36
  299. package/dist/domain/evidenceBundle.js +47 -8
  300. package/dist/domain/evidenceCompletionLedger.js +2 -1
  301. package/dist/domain/evidenceErrors.js +12 -1
  302. package/dist/domain/explicitSensitiveFailure.js +17 -1
  303. package/dist/domain/firmware/firmwareAnalysis.js +6 -7
  304. package/dist/domain/functionComparison.js +4 -5
  305. package/dist/domain/functionComparisonDimensions.js +120 -87
  306. package/dist/domain/functionComparisonNormalization.js +23 -34
  307. package/dist/domain/functionComparisonResults.js +1 -4
  308. package/dist/domain/functionComparisonSchemas.js +2 -8
  309. package/dist/domain/functionDossierEvidence.js +2 -37
  310. package/dist/domain/hopperErrors.js +23 -2
  311. package/dist/domain/hopperValues.js +51 -8
  312. package/dist/domain/immutableJson.js +114 -0
  313. package/dist/domain/inputIssueProjection.js +3 -0
  314. package/dist/domain/javascript/electronActiveObservation.js +47 -64
  315. package/dist/domain/javascript/electronObservation.js +14 -3
  316. package/dist/domain/javascript/electronStaticAnalysisBrowser.js +10 -9
  317. package/dist/domain/javascript/electronStaticAnalysisIpc.js +2 -1
  318. package/dist/domain/javascript/electronStaticAnalysisNative.js +2 -1
  319. package/dist/domain/javascript/electronStaticAnalysisValues.js +6 -12
  320. package/dist/domain/javascript/javascriptApplicationAnalysis.js +71 -23
  321. package/dist/domain/javascript/javascriptApplicationEvidenceSchemas.js +2 -0
  322. package/dist/domain/javascript/javascriptApplicationGraph.js +39 -3
  323. package/dist/domain/javascript/javascriptApplicationGraphSchemas.js +9 -2
  324. package/dist/domain/javascript/javascriptApplicationVersionItems.js +5 -2
  325. package/dist/domain/javascript/javascriptApplicationVersionKeys.js +2 -1
  326. package/dist/domain/javascript/javascriptAstValues.js +20 -0
  327. package/dist/{application/javascript/JavaScriptReturnShapeProjection.js → domain/javascript/javascriptExportReturnShapeProjection.js} +4 -4
  328. package/dist/domain/javascript/javascriptExportShapeComparison.js +7 -1
  329. package/dist/domain/javascript/javascriptExportShapeComparisonIdentity.js +6 -1
  330. package/dist/domain/javascript/javascriptExportShapeComparisonSchemas.js +29 -1
  331. package/dist/domain/javascript/javascriptExportShapeSelection.js +5 -5
  332. package/dist/domain/javascript/javascriptExportShapeVariants.js +67 -14
  333. package/dist/domain/javascript/javascriptFeatureSeed.js +20 -0
  334. package/dist/domain/javascript/javascriptFeatureTraversal.js +0 -1
  335. package/dist/domain/javascript/javascriptNativeHandoff.js +1 -1
  336. package/dist/domain/javascript/javascriptRecovery.js +3 -8
  337. package/dist/domain/javascript/javascriptRuntimeLoadState.js +0 -1
  338. package/dist/domain/javascript/javascriptRuntimeObservation.js +10 -2
  339. package/dist/domain/javascript/javascriptRuntimeReconciliationMatching.js +1 -1
  340. package/dist/domain/javascript/javascriptRuntimeReconciliationParsing.js +3 -2
  341. package/dist/domain/javascript/javascriptRuntimeStaticCandidates.js +0 -1
  342. package/dist/domain/javascript/javascriptSemanticAnalysis.js +106 -5
  343. package/dist/domain/javascript/javascriptSemanticAsyncEffects.js +2 -1
  344. package/dist/domain/javascript/javascriptSemanticCalls.js +2 -1
  345. package/dist/domain/javascript/javascriptSemanticChildProcesses.js +2 -1
  346. package/dist/domain/javascript/javascriptSemanticCoverage.js +6 -5
  347. package/dist/domain/javascript/javascriptSemanticDataEffectHelpers.js +9 -17
  348. package/dist/domain/javascript/javascriptSemanticDataEffects.js +23 -6
  349. package/dist/domain/javascript/javascriptSemanticGraph.js +98 -43
  350. package/dist/domain/javascript/javascriptSemanticGraphSchemas.js +1 -0
  351. package/dist/domain/javascript/javascriptSemanticMemberMutations.js +77 -20
  352. package/dist/domain/javascript/javascriptSemanticMutationValues.js +21 -27
  353. package/dist/domain/javascript/javascriptSemanticObjects.js +83 -42
  354. package/dist/domain/javascript/javascriptSemanticPrimitives.js +18 -21
  355. package/dist/domain/javascript/javascriptSemanticProjection.js +2 -3
  356. package/dist/domain/javascript/javascriptSemanticPromises.js +2 -1
  357. package/dist/domain/javascript/javascriptSemanticQuerySchemas.js +8 -4
  358. package/dist/domain/javascript/javascriptSemanticResourceLimits.js +77 -0
  359. package/dist/domain/javascript/javascriptSemanticResources.js +1 -1
  360. package/dist/domain/javascript/javascriptSemanticReturns.js +32 -17
  361. package/dist/domain/javascript/javascriptSemanticSlots.js +72 -0
  362. package/dist/domain/javascript/javascriptSemanticValues.js +126 -61
  363. package/dist/domain/javascript/javascriptSourceMapPaths.js +104 -0
  364. package/dist/domain/javascript/javascriptSourceParser.js +6 -2
  365. package/dist/domain/javascript/javascriptStaticAnalysis.js +22 -17
  366. package/dist/domain/javascript/javascriptStaticAnalysisBundler.js +5 -3
  367. package/dist/domain/javascript/javascriptStaticAnalysisCalls.js +16 -5
  368. package/dist/domain/javascript/javascriptStaticAnalysisFindings.js +66 -7
  369. package/dist/domain/javascript/javascriptStaticAnalysisHelpers.js +28 -17
  370. package/dist/domain/javascript/javascriptStaticAnalysisState.js +3 -2
  371. package/dist/domain/javascript/sourceToBundleComparison.js +12 -3
  372. package/dist/domain/javascript/sourceToBundleSignals.js +47 -19
  373. package/dist/domain/jsonSerialization.js +109 -0
  374. package/dist/domain/jsonValue.js +90 -6
  375. package/dist/domain/localPath.js +6 -0
  376. package/dist/domain/managed/managedApplicationGraph.js +10 -10
  377. package/dist/domain/managed/managedArtifact.js +6 -4
  378. package/dist/domain/managed/managedInspectionEvidence.js +16 -0
  379. package/dist/domain/managed/managedMemberComparison.js +2 -9
  380. package/dist/domain/managed/managedMemberComparisonMatch.js +5 -9
  381. package/dist/domain/managed/managedNativeVerification.js +3 -11
  382. package/dist/domain/managed/managedNativeVerificationMatch.js +9 -3
  383. package/dist/domain/native/binaryLayout.js +2 -3
  384. package/dist/domain/native/fileOffsetPartialObservation.js +1 -0
  385. package/dist/domain/native/nativeApiBoundary.js +1 -1
  386. package/dist/domain/native/nativeCallObservation.js +37 -13
  387. package/dist/domain/native/nativeCallPartialObservation.js +33 -0
  388. package/dist/domain/native/nativeInstruction.js +7 -0
  389. package/dist/domain/native/recordedCrash.js +2 -3
  390. package/dist/domain/offsetDateTime.js +17 -0
  391. package/dist/domain/process/processCapture.js +21 -16
  392. package/dist/domain/process/processCaptureCoverage.js +67 -0
  393. package/dist/domain/process/processCaptureExample.js +2 -1
  394. package/dist/domain/process/processCaptureParsing.js +1 -34
  395. package/dist/domain/process/processCaptureValidation.js +81 -13
  396. package/dist/domain/process/processComparison.js +79 -26
  397. package/dist/domain/process/processObservation.js +10 -2
  398. package/dist/domain/process/processScenario.js +35 -12
  399. package/dist/domain/process/processTraceComparison.js +0 -2
  400. package/dist/domain/process/processTraceDimensionProjection.js +1 -1
  401. package/dist/domain/process/processTraceEvaluation.js +15 -11
  402. package/dist/domain/process/processTraceSpecification.js +3 -4
  403. package/dist/domain/propertyListKeys.js +1 -1
  404. package/dist/domain/propertyListXmlText.js +19 -0
  405. package/dist/domain/providerAdapterError.js +3 -1
  406. package/dist/domain/providerOperationHealth.js +54 -0
  407. package/dist/domain/reconstructionCoverage.js +5 -2
  408. package/dist/domain/reconstructionObligationLedgerSchemas.js +2 -1
  409. package/dist/domain/reconstructionReadinessSchemas.js +2 -1
  410. package/dist/domain/reconstructionVerification.js +9 -46
  411. package/dist/domain/reconstructionVerificationSchemas.js +4 -3
  412. package/dist/domain/referenceSourceGraph.js +20 -21
  413. package/dist/domain/staticRuntimeCorrelation.js +8 -45
  414. package/dist/domain/stringPatterns.js +6 -0
  415. package/dist/domain/swiftSymbolClassification.js +61 -0
  416. package/dist/domain/symbolAnalysis.js +66 -18
  417. package/dist/domain/webBundleAnalysis.js +20 -8
  418. package/dist/domain/webBundleAnalyzerInspection.js +13 -8
  419. package/dist/domain/webBundleAnalyzerResult.js +41 -2
  420. package/dist/domain/webCaptureDiff.js +0 -1
  421. package/dist/domain/webCaptureDiffSchemas.js +6 -3
  422. package/dist/domain/webEventListeners.js +3 -2
  423. package/dist/domain/webExecution.js +3 -2
  424. package/dist/domain/webRuntime.js +19 -7
  425. package/dist/domain/webScriptExport.js +1 -1
  426. package/dist/domain/webSourceLocation.js +1 -0
  427. package/dist/dotnet/ManagedArtifactInspector.js +2 -19
  428. package/dist/dotnet/ManagedMemberInspector.js +12 -18
  429. package/dist/dotnet/ManagedMemberInspectorCore.js +47 -44
  430. package/dist/dotnet/ManagedMemberRows.js +75 -62
  431. package/dist/dotnet/ManagedMetadataInventory.js +16 -22
  432. package/dist/dotnet/ManagedMethodBodyReader.js +4 -0
  433. package/dist/dotnet/ManagedNativeBoundaryHelpers.js +109 -94
  434. package/dist/dotnet/ManagedNativeBoundaryInspector.js +12 -21
  435. package/dist/dotnet/ManagedReaderFailure.js +16 -0
  436. package/dist/dotnet/ManagedStaticProvider.js +3 -5
  437. package/dist/evaluation/AgentEvaluationFixtures.js +250 -0
  438. package/dist/evaluation/AgentEvaluationReport.js +28 -0
  439. package/dist/evaluation/CodexAgentEval.js +12 -8
  440. package/dist/evaluation/KnownAnswerEvaluation.js +281 -0
  441. package/dist/evm/EvmoleInterfaceProvider.js +2 -1
  442. package/dist/firmware/FirmwareCommand.js +9 -5
  443. package/dist/firmware/FirmwareFiles.js +1 -1
  444. package/dist/firmware/FirmwareProvider.js +4 -4
  445. package/dist/generatedPackageMetadata.js +2 -2
  446. package/dist/ghidra/GhidraAnalysisProfile.js +7 -5
  447. package/dist/ghidra/GhidraClient.js +126 -34
  448. package/dist/ghidra/GhidraClientStartup.js +0 -2
  449. package/dist/ghidra/GhidraDiagnostics.js +7 -7
  450. package/dist/ghidra/GhidraDoctor.js +6 -5
  451. package/dist/ghidra/GhidraFunctionValues.js +13 -12
  452. package/dist/ghidra/GhidraInstallation.js +58 -33
  453. package/dist/ghidra/GhidraInventoryValues.js +14 -4
  454. package/dist/ghidra/GhidraJavaLaunch.js +66 -0
  455. package/dist/ghidra/GhidraLauncher.js +47 -22
  456. package/dist/ghidra/GhidraProvider.js +6 -2
  457. package/dist/ghidra/GhidraProviderCapabilities.js +20 -2
  458. package/dist/ghidra/GhidraProviderClient.js +36 -15
  459. package/dist/ghidra/GhidraSessionError.js +13 -7
  460. package/dist/ghidra/GhidraSessionRoot.js +39 -0
  461. package/dist/ghidra/GhidraTargetSnapshot.js +47 -12
  462. package/dist/ghidra/GhidraTransport.js +20 -0
  463. package/dist/ghidra/extensions/GhidraExtensions.js +17 -10
  464. package/dist/ghidra/extensions/nativeaot/NativeAotAdapter.js +8 -2
  465. package/dist/hopper/BridgeLauncher.js +65 -56
  466. package/dist/hopper/HopperAnalysisProfile.js +65 -12
  467. package/dist/hopper/HopperCleanup.js +63 -22
  468. package/dist/hopper/HopperClient.js +288 -59
  469. package/dist/hopper/HopperFileOffset.js +237 -0
  470. package/dist/hopper/HopperMachOImage.js +197 -0
  471. package/dist/hopper/HopperOperationStage.js +6 -0
  472. package/dist/hopper/HopperProvider.js +71 -19
  473. package/dist/hopper/HopperProviderCapabilities.js +19 -1
  474. package/dist/hopper/HopperRegexSearch.js +134 -0
  475. package/dist/hopper/HopperRegexWorker.js +27 -0
  476. package/dist/hopper/HopperRequestQueue.js +68 -19
  477. package/dist/hopper/HopperTargetLease.js +133 -49
  478. package/dist/hopper/LinuxPrivateDisplayProbe.js +6 -0
  479. package/dist/ida/IdaConfiguration.js +8 -3
  480. package/dist/ida/IdaInput.js +1 -7
  481. package/dist/ida/IdaMcpConnection.js +8 -4
  482. package/dist/ida/IdaOperationRunner.js +3 -3
  483. package/dist/ida/IdaProvider.js +8 -12
  484. package/dist/ida/IdaSessionClient.js +20 -18
  485. package/dist/ida/IdaWorkspace.js +12 -13
  486. package/dist/inspector/JavaScriptRuntimeScope.js +9 -1
  487. package/dist/inspector/V8InspectorCaptureProjection.js +9 -4
  488. package/dist/inspector/V8InspectorProvider.js +82 -36
  489. package/dist/javascript/recovery/WakaruCommand.js +7 -2
  490. package/dist/javascript/recovery/WakaruExecution.js +5 -2
  491. package/dist/javascript/sourceMaps/DecodedSourceMap.js +47 -0
  492. package/dist/javascript/sourceMaps/SourceMapCommand.js +16 -0
  493. package/dist/javascript/sourceMaps/SourceMapFormat.js +79 -31
  494. package/dist/javascript/sourceMaps/TraceSourceMap.js +14 -28
  495. package/dist/main/shutdown.js +11 -3
  496. package/dist/main/startup.js +9 -2
  497. package/dist/main/transport.js +22 -2
  498. package/dist/main.js +11 -18
  499. package/dist/mcpDoctor.js +62 -2
  500. package/dist/native/AppleDispatchCoverage.js +47 -6
  501. package/dist/native/AppleDispatchDecodeFacts.js +6 -0
  502. package/dist/native/AppleDispatchMetadata.js +6 -3
  503. package/dist/native/AppleMachoFixups.js +48 -24
  504. package/dist/native/AppleMachoSelection.js +48 -22
  505. package/dist/native/AppleObjcCategories.js +6 -2
  506. package/dist/native/AppleObjcDispatchFacets.js +5 -2
  507. package/dist/native/AppleObjcProperties.js +2 -1
  508. package/dist/native/AppleSwiftDispatchFacets.js +27 -21
  509. package/dist/native/AppleSwiftVtables.js +21 -15
  510. package/dist/native/CommandRunner.js +87 -88
  511. package/dist/native/LldbCallTracer.js +372 -103
  512. package/dist/native/LldbRetainedObservations.js +178 -0
  513. package/dist/native/NativeCallObservation.js +62 -3
  514. package/dist/native/NativeMacOSProvider.js +122 -31
  515. package/dist/native/NativeUiHelperRuntime.js +11 -2
  516. package/dist/native/NativeUiObservation.js +2 -2
  517. package/dist/native/SignatureTargetBinding.js +155 -0
  518. package/dist/native/parsers/lipo.js +71 -1
  519. package/dist/native/pwndbg/PwndbgCoreContext.js +25 -5
  520. package/dist/native/pwntools/PwntoolsDecoder.js +2 -1
  521. package/dist/native/pwntools/RecordedCrashStructureBindings.js +2 -0
  522. package/dist/process/DarwinProcessRunTokenReader.js +23 -10
  523. package/dist/process/ExecFileOutput.js +108 -6
  524. package/dist/process/OwnedCommand.js +7 -2
  525. package/dist/process/PrivateRuntimeRoot.js +10 -5
  526. package/dist/process/ProcessOwnership.js +204 -57
  527. package/dist/process/ProcessOwnershipObservation.js +60 -9
  528. package/dist/process/ProviderProcess.js +39 -10
  529. package/dist/process/capture/FilesystemSnapshot.js +50 -13
  530. package/dist/process/capture/ProcessCaptureError.js +15 -2
  531. package/dist/process/capture/ProcessCaptureLifecycle.js +235 -81
  532. package/dist/process/capture/ProcessFilesystemEffects.js +33 -3
  533. package/dist/process/capture/ProcessHarness.js +21 -25
  534. package/dist/process/capture/ProcessNormalization.js +20 -2
  535. package/dist/process/capture/ProcessSampling.js +25 -2
  536. package/dist/process/capture/TerminalRenderer.js +14 -0
  537. package/dist/process/snapshotEnvironment.js +14 -0
  538. package/dist/server/EvidenceMcpServer.js +157 -0
  539. package/dist/server/createServer.js +61 -41
  540. package/dist/server/mcpClientMetadata.js +12 -5
  541. package/dist/server/promptCompletion.js +3 -8
  542. package/dist/server/registerAnalysisViewTool.js +15 -0
  543. package/dist/server/registerAndroidTools.js +2 -5
  544. package/dist/server/registerApplicationTools/compareExportShapes.js +4 -5
  545. package/dist/server/registerApplicationTools/compareSourceToBundle.js +4 -5
  546. package/dist/server/registerApplicationTools/compareVersions.js +4 -5
  547. package/dist/server/registerApplicationTools/coverage.js +1 -2
  548. package/dist/server/registerApplicationTools/helpers.js +1 -4
  549. package/dist/server/registerApplicationTools/obligationLedger.js +4 -5
  550. package/dist/server/registerApplicationTools/projectMobileApplicationGraph.js +3 -4
  551. package/dist/server/registerApplicationTools/traceFeature.js +4 -5
  552. package/dist/server/registerApplicationTools/traceSemantics.js +4 -5
  553. package/dist/server/registerArtifactComparisonTool.js +13 -10
  554. package/dist/server/registerBinaryDiagnosticsTools.js +2 -5
  555. package/dist/server/registerBrowserScenarioTool.js +3 -6
  556. package/dist/server/registerBrowserTools.js +13 -18
  557. package/dist/server/registerBundleComparisonTool.js +5 -7
  558. package/dist/server/registerCloseLifecycleTool.js +9 -20
  559. package/dist/server/registerElectronTools.js +10 -15
  560. package/dist/server/registerEnhancedTools.js +36 -77
  561. package/dist/server/registerEvidenceTools.js +3 -6
  562. package/dist/server/registerEvmTools.js +2 -5
  563. package/dist/server/registerFirmwareTools.js +2 -5
  564. package/dist/server/registerFunctionComparisonTool.js +15 -12
  565. package/dist/server/registerInvestigationTools.js +16 -17
  566. package/dist/server/registerJavaScriptRecoveryTool.js +2 -5
  567. package/dist/server/registerJavaScriptRuntimeObservationTools.js +6 -8
  568. package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +5 -8
  569. package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +4 -7
  570. package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +6 -9
  571. package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +6 -9
  572. package/dist/server/registerOfficialTools.js +4 -21
  573. package/dist/server/registerProcessComparisonTool.js +74 -48
  574. package/dist/server/registerRecordedCrashTools.js +2 -5
  575. package/dist/server/registerSessionRecordTools.js +19 -24
  576. package/dist/server/registerSessionStatusTool.js +19 -6
  577. package/dist/server/registerSessionTools.js +20 -18
  578. package/dist/server/registerWebModuleTool.js +2 -5
  579. package/dist/server/registerWebNetworkCaptureTool.js +2 -5
  580. package/dist/server/registerWebRuntimeTools.js +4 -9
  581. package/dist/server/registerWebScriptTool.js +2 -5
  582. package/dist/server/registerWebSourceLocationTool.js +2 -5
  583. package/dist/server/runDerivedOperation.js +15 -3
  584. package/dist/server/sessionAvailabilityPolicy.js +0 -1
  585. package/dist/server/toolRegistrationOptions.js +2 -2
  586. package/dist/server/toolResult.js +75 -51
  587. package/dist/server/toolResultEncoding.js +34 -0
  588. package/dist/windows/WindowsNativeLoader.js +1 -0
  589. package/dist/windows/WindowsOwnedProcess.js +60 -15
  590. package/dist/windows/WindowsPrivateRuntime.js +7 -8
  591. package/install.sh +1 -1
  592. package/native/windows/README.md +3 -1
  593. package/native/windows/build/manifest.json +2 -2
  594. package/native/windows/build/rea-windows-x64.node +0 -0
  595. package/package.json +44 -30
  596. package/scripts/electron-active-hook-boundaries.cjs +18 -20
  597. package/scripts/electron-active-hook.cjs +241 -37
  598. package/scripts/rea.mjs +3 -6
  599. package/skills/reverse-engineer-anything/SKILL.md +12 -3
  600. package/skills/reverse-engineer-anything/references/android-applications.md +6 -3
  601. package/skills/reverse-engineer-anything/references/evidence-workflows.md +8 -4
  602. package/skills/reverse-engineer-anything/references/javascript-applications.md +20 -3
  603. package/skills/reverse-engineer-anything/references/native-and-artifacts.md +9 -0
  604. package/dist/config.js +0 -1
  605. package/dist/contracts/browserCaptureToolInputSchema.js +0 -43
  606. package/dist/contracts/process/processCaptureExample.js +0 -2
  607. package/dist/contracts/toolOutputSchemas.js +0 -2
  608. package/dist/ghidra/GhidraDefaults.js +0 -2
  609. package/dist/main/reload.js +0 -12
  610. package/dist/main/state.js +0 -3
  611. package/dist/server/sessionToolPolicies.js +0 -2
@@ -1,13 +1,16 @@
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";
4
- import { currentSemanticScope, resolveSemanticBindingFromScope, semanticScopeId, semanticVariableScope, } from "./javascriptSemanticState.js";
3
+ import { collectSemanticModuleLink, collectSemanticCallable, collectSemanticReferences, immutableSemanticBindings, immutableSemanticScopes, } from "./javascriptSemanticProjection.js";
4
+ import { semanticStaticPropertyKey } from "./javascriptAstValues.js";
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";
13
+ import { semanticResourceLimitsIn } from "./javascriptSemanticResourceLimits.js";
11
14
  import { parseJavaScriptSource, } from "./javascriptSourceParser.js";
12
15
  /** Recover lexical bindings, aliases, constants, and module links. */
13
16
  export const analyzeJavaScriptSemantics = (source) => {
@@ -44,7 +47,10 @@ export const analyzeParsedJavaScriptSemantics = (file) => {
44
47
  references,
45
48
  moduleLinks,
46
49
  ...derived,
47
- coverage: semanticCoverage(parserPartial),
50
+ coverage: semanticCoverage(parserPartial, semanticResourceLimitsIn([
51
+ ...bindings.map(({ value }) => value),
52
+ ...callables.flatMap((callable) => callable.returnSites.map(({ value }) => value)),
53
+ ])),
48
54
  limitations: [
49
55
  ...(parserPartial
50
56
  ? [
@@ -59,6 +65,97 @@ export const analyzeParsedJavaScriptSemantics = (file) => {
59
65
  ],
60
66
  };
61
67
  };
68
+ /**
69
+ * Resolve only the lexical receiver identity needed to distinguish browser
70
+ * `window.open` from XHR and global storage `.open` calls. This deliberately
71
+ * builds definitions without running semantic value or provenance analysis.
72
+ */
73
+ export const classifyParsedJavaScriptOpenReceivers = (file) => {
74
+ const state = createState(file.program);
75
+ collectDefinitions(file.program, state);
76
+ const facts = new Map();
77
+ traverseJavaScriptAst(file.program, {
78
+ enter: (node) => {
79
+ if ((!t.isCallExpression(node) && !t.isOptionalCallExpression(node)) ||
80
+ (!t.isMemberExpression(node.callee) &&
81
+ !t.isOptionalMemberExpression(node.callee)) ||
82
+ semanticStaticPropertyKey(node.callee.property, node.callee.computed) !== "open" ||
83
+ !t.isIdentifier(node.callee.object))
84
+ return;
85
+ const receiver = node.callee.object.name;
86
+ const binding = resolveSemanticBindingState(state, node, receiver);
87
+ if (binding === undefined) {
88
+ if (semanticResolutionBlocked(state, node, receiver))
89
+ return;
90
+ const fact = openGlobalFact(receiver);
91
+ if (fact !== undefined)
92
+ facts.set(node.start ?? -1, fact);
93
+ return;
94
+ }
95
+ // A lexically bound receiver overrides ambient browser globals. Mark an
96
+ // otherwise unresolved local as local so name-based window.open
97
+ // heuristics do not hide its XHR-like overloads.
98
+ facts.set(node.start ?? -1, "local");
99
+ if (receiver === "indexedDB" || receiver === "caches") {
100
+ facts.set(node.start ?? -1, receiver === "indexedDB" ? "local-indexed-db" : "local-cache-storage");
101
+ return;
102
+ }
103
+ if (binding.mutable || binding.initializers.length !== 1)
104
+ return;
105
+ const initializer = binding.initializers[0]?.node;
106
+ if (!t.isIdentifier(initializer))
107
+ return;
108
+ const initializerBinding = resolveSemanticBindingState(state, initializer, initializer.name);
109
+ if (initializerBinding !== undefined) {
110
+ if (initializer.name === "indexedDB" || initializer.name === "caches") {
111
+ const localFact = initializer.name === "indexedDB"
112
+ ? "local-indexed-db"
113
+ : "local-cache-storage";
114
+ facts.set(node.start ?? -1, localFact);
115
+ if (initializerBinding.mutable ||
116
+ initializerBinding.initializers.length !== 1)
117
+ return;
118
+ const nested = initializerBinding.initializers[0]?.node;
119
+ if (t.isIdentifier(nested)) {
120
+ const nestedFact = resolveGlobalAliasFact(state, initializer, nested.name);
121
+ if (nestedFact !== undefined)
122
+ facts.set(node.start ?? -1, nestedFact);
123
+ }
124
+ }
125
+ else if (initializer.name === "window") {
126
+ facts.set(node.start ?? -1, "local");
127
+ }
128
+ return;
129
+ }
130
+ const aliasFact = resolveGlobalAliasFact(state, initializer, initializer.name);
131
+ if (aliasFact !== undefined)
132
+ facts.set(node.start ?? -1, aliasFact);
133
+ },
134
+ });
135
+ return facts;
136
+ };
137
+ const openGlobalFact = (name) => {
138
+ if (name === "window" ||
139
+ name === "self" ||
140
+ name === "globalThis" ||
141
+ name === "top" ||
142
+ name === "parent" ||
143
+ name === "opener" ||
144
+ name === "frames" ||
145
+ name === "document")
146
+ return "window";
147
+ if (name === "indexedDB")
148
+ return "indexed-db";
149
+ if (name === "caches")
150
+ return "cache-storage";
151
+ return undefined;
152
+ };
153
+ const resolveGlobalAliasFact = (state, node, name) => {
154
+ if (resolveSemanticBindingState(state, node, name) !== undefined ||
155
+ semanticResolutionBlocked(state, node, name))
156
+ return undefined;
157
+ return openGlobalFact(name);
158
+ };
62
159
  const createState = (program) => {
63
160
  const root = {
64
161
  scopeId: semanticScopeId("program", program),
@@ -184,7 +281,11 @@ const bindInnerDeclaration = (node, parent, scope, state) => {
184
281
  });
185
282
  else if (t.isAssignmentExpression(node)) {
186
283
  if (t.isIdentifier(node.left))
187
- 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);
188
289
  else
189
290
  for (const identifier of assignedPatternIdentifiers(node.left))
190
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,8 +1,9 @@
1
- /** Classify whole-file semantic coverage from parser recovery. */
2
- export const semanticCoverage = (parserPartial) => ({
3
- status: parserPartial ? "partial" : "complete",
4
- omittedCount: 0,
5
- });
1
+ /** Classify whole-file semantic coverage from parsing and value bounds. */
2
+ export const semanticCoverage = (parserPartial, resourceLimits = []) => resourceLimits.length > 0
3
+ ? { status: "partial", omittedCount: null, resourceLimits }
4
+ : { status: parserPartial ? "partial" : "complete", omittedCount: 0 };
5
+ /** Read typed resource-limit classifications from any coverage state. */
6
+ export const semanticCoverageResourceLimits = (coverage) => coverage.resourceLimits ?? [];
6
7
  /** Classify one callable's direct-return coverage. */
7
8
  export const semanticReturnCoverage = (retainedCount, parserPartial) => ({
8
9
  status: parserPartial ? "partial" : "complete",
@@ -3,7 +3,7 @@ import { semanticBuiltinNamespacePath } from "./javascriptSemanticProvenance.js"
3
3
  import { semanticCallableIdForNode } from "./javascriptSemanticProjection.js";
4
4
  import { resolveSemanticBindingState, semanticResolutionBlocked, } from "./javascriptSemanticState.js";
5
5
  import { traverseJavaScriptAst } from "./javascriptSemanticTraversal.js";
6
- import { semanticStaticPropertyKey, semanticStaticPropertyName, } from "./javascriptAstValues.js";
6
+ import { readExactJavaScriptLiteral, semanticStaticPropertyKey, semanticStaticPropertyName, } from "./javascriptAstValues.js";
7
7
  /** Resolve bindings written by the nearest variable or assignment owner. */
8
8
  export const assignedSemanticResultBindings = (node, ancestors, state) => {
9
9
  for (let index = ancestors.length - 1; index >= 0; index -= 1) {
@@ -164,11 +164,14 @@ export const dataEffectPrimitive = (node) => {
164
164
  };
165
165
  /** Read one static string or expression-free template. */
166
166
  export const dataEffectLiteralString = (node) => {
167
- if (t.isStringLiteral(node))
168
- return node.value;
169
- if (t.isTemplateLiteral(node) && node.expressions.length === 0)
170
- return node.quasis[0]?.value.cooked ?? node.quasis[0]?.value.raw ?? null;
171
- return null;
167
+ if (node === undefined)
168
+ return null;
169
+ const literal = readExactJavaScriptLiteral(node);
170
+ if (literal.found && typeof literal.value === "string")
171
+ return literal.value;
172
+ return t.isTemplateLiteral(node) && node.expressions.length === 0
173
+ ? (node.quasis[0]?.value.raw ?? null)
174
+ : null;
172
175
  };
173
176
  /** Read a member callee from call or construction syntax. */
174
177
  export const dataEffectMemberCallee = (node) => t.isMemberExpression(node.callee) || t.isOptionalMemberExpression(node.callee)
@@ -179,14 +182,3 @@ export const dataEffectMemberObject = (node) => node !== null &&
179
182
  (t.isMemberExpression(node) || t.isOptionalMemberExpression(node))
180
183
  ? node.object
181
184
  : null;
182
- /** Compare Babel source offsets for exact containment. */
183
- export const containsSemanticNode = (outer, inner) => outer.start !== null &&
184
- outer.start !== undefined &&
185
- outer.end !== null &&
186
- outer.end !== undefined &&
187
- inner.start !== null &&
188
- inner.start !== undefined &&
189
- inner.end !== null &&
190
- inner.end !== undefined &&
191
- outer.start <= inner.start &&
192
- outer.end >= inner.end;
@@ -1,9 +1,9 @@
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
- import { builtinDataEffectMethod as builtinMethod, containsSemanticNode as containsNode, 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";
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";
8
8
  /** Recover configuration, request, and boundary candidates from inert syntax. */
9
9
  export const collectJavaScriptSemanticDataEffects = (program, state, callables) => {
@@ -80,20 +80,37 @@ const processConfigurationMember = (node, state) => {
80
80
  return null;
81
81
  // `process.env[""]` names an exact (empty) key; only a dynamic key is unknown.
82
82
  const key = semanticStaticPropertyKey(node.property, node.computed);
83
+ if (family === "argv" && key !== null && !isArrayIndexKey(key))
84
+ return null;
83
85
  return {
84
86
  kind: family === "env" ? "environment" : "argv",
85
87
  key,
86
88
  resolution: key === null ? "partial" : "complete",
87
89
  };
88
90
  };
91
+ const isArrayIndexKey = (key) => {
92
+ if (!/^(?:0|[1-9][0-9]*)$/u.test(key))
93
+ return false;
94
+ const index = Number(key);
95
+ return Number.isSafeInteger(index) && index < 2 ** 32 - 1;
96
+ };
89
97
  const collectDefaults = (program, context, configurations) => {
90
98
  const output = [];
99
+ const configurationsByNode = new Map(configurations.map((candidate) => [candidate.node, candidate]));
91
100
  traverseWithContext(program, context, (node) => {
92
101
  if (!t.isLogicalExpression(node) ||
93
102
  (node.operator !== "??" && node.operator !== "||"))
94
103
  return;
95
- const sources = configurations.filter(({ node: source }) => containsNode(node.left, source));
96
- if (sources.length !== 1 || sources[0] === undefined)
104
+ let source = node.left;
105
+ while (t.isParenthesizedExpression(source) ||
106
+ t.isTSAsExpression(source) ||
107
+ t.isTSTypeAssertion(source) ||
108
+ t.isTypeCastExpression(source) ||
109
+ t.isTSSatisfiesExpression(source) ||
110
+ t.isTSNonNullExpression(source))
111
+ source = source.expression;
112
+ const candidate = configurationsByNode.get(source);
113
+ if (candidate === undefined)
97
114
  return;
98
115
  output.push({
99
116
  configId: `config:default:${String(node.start ?? -1)}:${String(node.end ?? -1)}`,
@@ -101,8 +118,8 @@ const collectDefaults = (program, context, configurations) => {
101
118
  location: range(node.right),
102
119
  ownerCallableId: context.callableStack.at(-1) ?? null,
103
120
  resultBindingId: outerAssignedBinding(node, context),
104
- key: sources[0].operation.key,
105
- sourceConfigId: sources[0].operation.configId,
121
+ key: candidate.operation.key,
122
+ sourceConfigId: candidate.operation.configId,
106
123
  value: primitiveValue(node.right),
107
124
  resolution: primitiveValue(node.right) === null ? "partial" : "complete",
108
125
  });
@@ -1,6 +1,8 @@
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";
5
+ import { freezeOwnedJsonSnapshotSteps } from "../immutableJson.js";
4
6
  import { JAVASCRIPT_SEMANTIC_RELATION_FAMILIES, JAVASCRIPT_SEMANTIC_RELATION_FAMILY, javaScriptSemanticFingerprintInputSchema, javaScriptSemanticFingerprintSchema, javaScriptSemanticGraphInputSchema, javaScriptSemanticGraphRecordSchema, javaScriptSemanticNodeInputSchema, javaScriptSemanticNodeSchema, javaScriptSemanticRelationInputSchema, javaScriptSemanticRelationSchema, javaScriptSemanticUnknownInputSchema, javaScriptSemanticUnknownSchema, } from "./javascriptSemanticGraphSchemas.js";
5
7
  const normalizeEvidence = (evidence) => ({
6
8
  ...evidence,
@@ -95,7 +97,7 @@ const sortedUniqueIssue = (values, path, label, context) => {
95
97
  return;
96
98
  }
97
99
  };
98
- const checkCoverage = (graph, context) => {
100
+ function* checkCoverageSteps(graph, context) {
99
101
  const families = graph.coverage.families.map(({ family }) => family);
100
102
  if (canonicalJson(families, "JavaScript semantic graph") !==
101
103
  canonicalJson(JAVASCRIPT_SEMANTIC_RELATION_FAMILIES, "JavaScript semantic graph"))
@@ -121,11 +123,18 @@ const checkCoverage = (graph, context) => {
121
123
  message: "Truncated graph coverage must identify an effective limit",
122
124
  });
123
125
  const relationsByFamily = new Map(JAVASCRIPT_SEMANTIC_RELATION_FAMILIES.map((family) => [family, 0]));
124
- for (const relation of graph.relations) {
126
+ for (const [index, relation] of graph.relations.entries()) {
127
+ if (index % 256 === 0)
128
+ yield;
125
129
  const family = JAVASCRIPT_SEMANTIC_RELATION_FAMILY[relation.relation];
126
130
  relationsByFamily.set(family, (relationsByFamily.get(family) ?? 0) + 1);
127
131
  }
128
- 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
+ }
129
138
  for (const [index, family] of graph.coverage.families.entries()) {
130
139
  if (family.retained_relations !== relationsByFamily.get(family.family))
131
140
  context.addIssue({
@@ -147,7 +156,7 @@ const checkCoverage = (graph, context) => {
147
156
  message: "Complete family coverage cannot omit or retain unknown facts",
148
157
  });
149
158
  }
150
- };
159
+ }
151
160
  const checkCanonicalOrder = (graph, context) => {
152
161
  sortedUniqueIssue(graph.root_node_ids, ["root_node_ids"], "Root nodes", context);
153
162
  sortedUniqueIssue(graph.nodes.map(({ node_id }) => node_id), ["nodes"], "Nodes", context);
@@ -156,8 +165,10 @@ const checkCanonicalOrder = (graph, context) => {
156
165
  sortedUniqueIssue(graph.unknowns.map(({ unknown_id }) => unknown_id), ["unknowns"], "Unknown frontiers", context);
157
166
  sortedUniqueIssue(graph.limitations, ["limitations"], "Limitations", context);
158
167
  };
159
- const checkNodes = (graph, nodes, context) => {
168
+ function* checkNodesSteps(graph, nodes, context) {
160
169
  for (const [index, node] of graph.nodes.entries()) {
170
+ if (index % 256 === 0)
171
+ yield;
161
172
  if (node.node_id !== javaScriptSemanticNodeId(node))
162
173
  context.addIssue({
163
174
  code: "custom",
@@ -172,18 +183,23 @@ const checkNodes = (graph, nodes, context) => {
172
183
  message: "Function owner must name a function node",
173
184
  });
174
185
  }
175
- };
176
- const checkRoots = (graph, nodes, context) => {
177
- 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;
178
191
  if (!nodes.has(root))
179
192
  context.addIssue({
180
193
  code: "custom",
181
194
  path: ["root_node_ids"],
182
195
  message: "Root identifier must name a semantic node",
183
196
  });
184
- };
185
- const checkRelations = (graph, nodes, context) => {
197
+ }
198
+ }
199
+ function* checkRelationsSteps(graph, nodes, context) {
186
200
  for (const [index, relation] of graph.relations.entries()) {
201
+ if (index % 256 === 0)
202
+ yield;
187
203
  const { relation_id: identifier, ...semantic } = relation;
188
204
  if (identifier !==
189
205
  "jsrg_relation_" + canonicalDigest(semantic, "JavaScript semantic graph"))
@@ -213,9 +229,11 @@ const checkRelations = (graph, nodes, context) => {
213
229
  message: "Candidate relations cannot claim observed resolution",
214
230
  });
215
231
  }
216
- };
217
- const checkUnknowns = (graph, nodes, context) => {
232
+ }
233
+ function* checkUnknownsSteps(graph, nodes, context) {
218
234
  for (const [index, unknown] of graph.unknowns.entries()) {
235
+ if (index % 256 === 0)
236
+ yield;
219
237
  const { unknown_id: identifier, ...semantic } = unknown;
220
238
  if (identifier !==
221
239
  "jsrg_unknown_" + canonicalDigest(semantic, "JavaScript semantic graph"))
@@ -249,7 +267,7 @@ const checkUnknowns = (graph, nodes, context) => {
249
267
  message: "Unknown frontiers require unknown or unavailable evidence",
250
268
  });
251
269
  }
252
- };
270
+ }
253
271
  const checkUnknownReferences = (graph, context) => {
254
272
  const unknownIds = new Set(graph.unknowns.map(({ unknown_id }) => unknown_id));
255
273
  for (const [index, family] of graph.coverage.families.entries())
@@ -260,8 +278,10 @@ const checkUnknownReferences = (graph, context) => {
260
278
  message: "Family coverage references an absent unknown frontier",
261
279
  });
262
280
  };
263
- const checkFingerprints = (graph, nodes, context) => {
281
+ function* checkFingerprintsSteps(graph, nodes, context) {
264
282
  for (const [index, fingerprint] of graph.fingerprints.entries()) {
283
+ if (index % 256 === 0)
284
+ yield;
265
285
  if (nodes.get(fingerprint.function_node_id)?.kind !== "function")
266
286
  context.addIssue({
267
287
  code: "custom",
@@ -295,23 +315,34 @@ const checkFingerprints = (graph, nodes, context) => {
295
315
  message: "Incomplete fingerprints require a limitation",
296
316
  });
297
317
  }
298
- };
299
- const checkGraphContent = (graph, context) => {
318
+ }
319
+ function* checkGraphContentSteps(graph, context) {
300
320
  checkCanonicalOrder(graph, context);
301
- const nodes = new Map(graph.nodes.map((node) => [node.node_id, node]));
302
- checkNodes(graph, nodes, context);
303
- checkRoots(graph, nodes, context);
304
- checkRelations(graph, nodes, context);
305
- 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);
306
331
  checkUnknownReferences(graph, context);
307
- checkFingerprints(graph, nodes, context);
308
- checkCoverage(graph, context);
332
+ yield* checkFingerprintsSteps(graph, nodes, context);
333
+ yield* checkCoverageSteps(graph, context);
309
334
  if (graph.coverage.status !== "complete" && graph.limitations.length === 0)
310
335
  context.addIssue({
311
336
  code: "custom",
312
337
  path: ["limitations"],
313
338
  message: "Non-complete graph coverage requires a limitation",
314
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
+ }
315
346
  };
316
347
  const checkGraph = (graph, context) => {
317
348
  checkGraphContent(graph, context);
@@ -326,28 +357,28 @@ const checkGraph = (graph, context) => {
326
357
  };
327
358
  /** Strict semantic graph schema with verified canonical commitments. */
328
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
+ });
329
379
  /** Normalize a complete companion graph and derive its graph ID. */
330
380
  export const createJavaScriptSemanticGraph = (input) => {
331
- const parsed = javaScriptSemanticGraphInputSchema.parse(input);
332
- const semantic = {
333
- ...parsed,
334
- root_node_ids: uniqueSorted(parsed.root_node_ids),
335
- nodes: [...parsed.nodes].sort((left, right) => compareCodePoints(left.node_id, right.node_id)),
336
- relations: [...parsed.relations].sort((left, right) => compareCodePoints(left.relation_id, right.relation_id)),
337
- fingerprints: [...parsed.fingerprints].sort((left, right) => compareCodePoints(left.fingerprint_id, right.fingerprint_id)),
338
- unknowns: [...parsed.unknowns].sort((left, right) => compareCodePoints(left.unknown_id, right.unknown_id)),
339
- coverage: {
340
- ...parsed.coverage,
341
- limits: [...parsed.coverage.limits].sort((left, right) => compareCodePoints(canonicalJson(left, "JavaScript semantic graph"), canonicalJson(right, "JavaScript semantic graph"))),
342
- families: [...parsed.coverage.families]
343
- .map((family) => ({
344
- ...family,
345
- unknown_ids: uniqueSorted(family.unknown_ids),
346
- }))
347
- .sort((left, right) => compareCodePoints(left.family, right.family)),
348
- },
349
- limitations: uniqueSorted(parsed.limitations),
350
- };
381
+ const semantic = normalizeGraphInput(javaScriptSemanticGraphInputSchema.parse(input));
351
382
  // The input schema already cloned and validated every field. Validate the
352
383
  // normalized relationships in place, then derive the only added field. The
353
384
  // public schema still verifies arbitrary records and their commitments.
@@ -365,3 +396,27 @@ export const createJavaScriptSemanticGraph = (input) => {
365
396
  throw new z.ZodError(issues);
366
397
  return record;
367
398
  };
399
+ const validatedImmutableSemanticGraphs = new WeakSet();
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);
415
+ yield* freezeOwnedJsonSnapshotSteps(graph);
416
+ validatedImmutableSemanticGraphs.add(graph);
417
+ return graph;
418
+ }
419
+ /** Recognize the exact completely sealed graph produced by the owned factory. */
420
+ export const isValidatedImmutableJavaScriptSemanticGraph = (value) => typeof value === "object" &&
421
+ value !== null &&
422
+ validatedImmutableSemanticGraphs.has(value);
@@ -221,6 +221,7 @@ export const JAVASCRIPT_SEMANTIC_UNKNOWN_REASONS = [
221
221
  "eval-or-generated-code",
222
222
  "incomplete-module",
223
223
  "missing-source",
224
+ "resource-limit",
224
225
  "unsupported-syntax",
225
226
  ];
226
227
  /** One unresolved semantic frontier before its ID is derived. */