rea-agents 6.1.0 → 6.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (573) hide show
  1. package/README.md +24 -24
  2. package/bridge/ghidra/ReaGhidraBridge.java +32 -4
  3. package/bridge/hopper_bridge.py +8 -1
  4. package/dist/android/JadxConfiguration.js +87 -7
  5. package/dist/android/JadxMcpTransport.js +14 -2
  6. package/dist/android/JadxProvider.js +64 -36
  7. package/dist/android/JadxSession.js +51 -9
  8. package/dist/application/BinaryTargetResolver.js +68 -20
  9. package/dist/application/BrowserEvidence.js +3 -8
  10. package/dist/application/BrowserScenarioEvidence.js +4 -20
  11. package/dist/application/CapabilityInventory.js +43 -9
  12. package/dist/application/ClientConfigurationDocument.js +97 -25
  13. package/dist/application/ClientRegistrationStatus.js +19 -6
  14. package/dist/application/DirectAnalysis.js +41 -20
  15. package/dist/application/DirectAnalysisCleanup.js +71 -0
  16. package/dist/application/DirectAnalysisStatus.js +3 -7
  17. package/dist/application/Doctor.js +40 -53
  18. package/dist/application/DoctorDiagnostics.js +2 -3
  19. package/dist/application/EnhancedTools.js +51 -6
  20. package/dist/application/EvidenceBundleFiles.js +8 -3
  21. package/dist/application/InvestigationProviders.js +13 -5
  22. package/dist/application/JsonFiles.js +56 -23
  23. package/dist/application/LinuxHopper.js +11 -7
  24. package/dist/application/MacHopper.js +15 -18
  25. package/dist/application/RealHopperAssertions.js +0 -11
  26. package/dist/application/ReconstructionObligationCandidates.js +10 -3
  27. package/dist/application/ReconstructionObligationLedgerProjection.js +3 -1
  28. package/dist/application/ReferenceSourceImportEntries.js +1 -1
  29. package/dist/application/RegularFileRead.js +17 -0
  30. package/dist/application/Setup.js +26 -23
  31. package/dist/application/SetupClientConfiguration.js +18 -7
  32. package/dist/application/SetupHost.js +20 -29
  33. package/dist/application/SetupPlan.js +24 -20
  34. package/dist/application/SetupSkill.js +57 -8
  35. package/dist/application/SupportedClients.js +43 -0
  36. package/dist/application/Uninstall.js +98 -30
  37. package/dist/application/UpdateMaintenance.js +13 -7
  38. package/dist/application/UpdateRuntime.js +12 -12
  39. package/dist/application/Utf8JsonInput.js +64 -0
  40. package/dist/application/WebScriptExportService.js +38 -5
  41. package/dist/application/WorkflowEvidence.js +25 -2
  42. package/dist/application/XrefsAddressResolution.js +45 -0
  43. package/dist/application/analysisView/AnalysisViewService.js +76 -0
  44. package/dist/application/android/AndroidAnalysisService.js +1 -1
  45. package/dist/application/binary/AnalysisClientCleanup.js +30 -5
  46. package/dist/application/binary/AnalysisProviderEvaluation.js +1 -2
  47. package/dist/application/binary/AnalysisProviderRegistry.js +2 -6
  48. package/dist/application/binary/AnalysisSnapshotCache.js +13 -10
  49. package/dist/application/binary/BinarySession.js +86 -29
  50. package/dist/application/binary/BinarySessionComposition.js +1 -3
  51. package/dist/application/binary/BinarySessionExecution.js +3 -5
  52. package/dist/application/binary/BinarySessionOpen.js +10 -2
  53. package/dist/application/binary/BinarySessionRecords.js +1 -1
  54. package/dist/application/binary/BinarySessionStatus.js +1 -6
  55. package/dist/application/binary/CompositeProvider.js +4 -18
  56. package/dist/application/binary/LazyAnalysisProvider.js +5 -5
  57. package/dist/application/binary/SessionProviderRouter.js +27 -135
  58. package/dist/application/homebrew.js +48 -0
  59. package/dist/application/javascript/ElectronActiveEvidence.js +10 -14
  60. package/dist/application/javascript/ElectronBoundaryAnalysis.js +2 -2
  61. package/dist/application/javascript/ElectronBoundaryGraphNative.js +5 -1
  62. package/dist/application/javascript/JavaScriptApplicationEvidence.js +3 -6
  63. package/dist/application/javascript/JavaScriptApplicationEvidenceGraph.js +107 -46
  64. package/dist/application/javascript/JavaScriptApplicationService.js +7 -1
  65. package/dist/application/javascript/JavaScriptApplicationWorkflowService.js +59 -45
  66. package/dist/application/javascript/JavaScriptArtifactAnalysis.js +5 -9
  67. package/dist/application/javascript/JavaScriptArtifactGraphBuilder.js +19 -27
  68. package/dist/application/javascript/JavaScriptArtifactGraphBundlers.js +11 -3
  69. package/dist/application/javascript/JavaScriptArtifactGraphContext.js +9 -0
  70. package/dist/application/javascript/JavaScriptArtifactGraphDocuments.js +8 -5
  71. package/dist/application/javascript/JavaScriptArtifactGraphFindings.js +46 -29
  72. package/dist/application/javascript/JavaScriptArtifactGraphStructure.js +0 -1
  73. package/dist/application/javascript/JavaScriptArtifactPathResolution.js +86 -27
  74. package/dist/application/javascript/JavaScriptArtifactReconstruction.js +52 -9
  75. package/dist/application/javascript/JavaScriptArtifactReconstructionInput.js +1 -0
  76. package/dist/application/javascript/JavaScriptJsonModules.js +2 -2
  77. package/dist/application/javascript/JavaScriptModuleRelationships.js +6 -18
  78. package/dist/application/javascript/JavaScriptRuntimeObservationService.js +3 -3
  79. package/dist/application/javascript/JavaScriptRuntimeReconciliationService.js +11 -27
  80. package/dist/application/javascript/JavaScriptSemanticGraphAsyncProjection.js +4 -5
  81. package/dist/application/javascript/JavaScriptSemanticGraphBuilder.js +8 -6
  82. package/dist/application/javascript/JavaScriptSemanticGraphChildProcessProjection.js +2 -3
  83. package/dist/application/javascript/JavaScriptSemanticGraphConstruction.js +7 -5
  84. package/dist/application/javascript/JavaScriptSemanticGraphDataProjection.js +3 -4
  85. package/dist/application/javascript/JavaScriptSemanticGraphEvidence.js +1 -1
  86. package/dist/application/javascript/JavaScriptSemanticGraphFingerprintProjection.js +2 -2
  87. package/dist/application/javascript/JavaScriptSemanticGraphFlowProjection.js +3 -7
  88. package/dist/application/javascript/JavaScriptSemanticGraphObjectProjection.js +76 -47
  89. package/dist/application/javascript/JavaScriptSemanticGraphProjection.js +4 -4
  90. package/dist/application/javascript/JavaScriptSemanticGraphResourceProjection.js +3 -4
  91. package/dist/application/javascript/JavaScriptSemanticGraphValueProjection.js +51 -25
  92. package/dist/application/javascript/JavaScriptSemanticTraceService.js +15 -10
  93. package/dist/application/managed/ManagedMemberComparisonService.js +2 -1
  94. package/dist/application/managed/ManagedNativeVerificationService.js +2 -1
  95. package/dist/application/native/NativeCallRoutes.js +2 -4
  96. package/dist/application/process/ProcessCli.js +11 -11
  97. package/dist/application/process/ProcessEvidence.js +0 -1
  98. package/dist/artifacts/ArtifactProvider.js +53 -30
  99. package/dist/artifacts/ArtifactProviderMetadata.js +1 -4
  100. package/dist/artifacts/ArtifactReader.js +31 -0
  101. package/dist/artifacts/AsarArtifactReader.js +81 -17
  102. package/dist/artifacts/DirectoryArtifactReader.js +2 -1
  103. package/dist/artifacts/MachOSliceArtifactReader.js +9 -2
  104. package/dist/artifacts/NativeDmgArtifactReader.js +207 -77
  105. package/dist/artifacts/NativeDmgOwnership.js +109 -0
  106. package/dist/artifacts/SafeOutputTree.js +16 -2
  107. package/dist/artifacts/ZipArtifactReader.js +11 -4
  108. package/dist/artifacts/apple/AppleAssetCatalogAnalysis.js +4 -2
  109. package/dist/artifacts/apple/DylibResolutionReader.js +17 -7
  110. package/dist/artifacts/apple/KeyedArchiveReader.js +68 -42
  111. package/dist/artifacts/apple/MachoLoadCommandReader.js +36 -6
  112. package/dist/artifacts/extraction/ArtifactExtraction.js +104 -29
  113. package/dist/artifacts/inventory/ArtifactGraphConstruction.js +71 -66
  114. package/dist/artifacts/inventory/ArtifactInventory.js +0 -1
  115. package/dist/artifacts/inventory/classify.js +33 -14
  116. package/dist/artifacts/inventory/hashStableRootArtifact.js +37 -0
  117. package/dist/artifacts/inventory/reader.js +3 -3
  118. package/dist/artifacts/inventory/scanCanonical.js +64 -34
  119. package/dist/artifacts/inventory/scanReader.js +12 -20
  120. package/dist/artifacts/javascript/JavaScriptArtifactFiles.js +65 -27
  121. package/dist/browser/BrowserScenarioPartialObservation.js +106 -0
  122. package/dist/browser/CdpBrowserProvider.js +6 -6
  123. package/dist/browser/CdpCaptureEventHandlers.js +2 -4
  124. package/dist/browser/CdpCaptureEvents.js +0 -1
  125. package/dist/browser/CdpCaptureStorageFingerprints.js +3 -3
  126. package/dist/browser/CdpCaptureValues.js +20 -0
  127. package/dist/browser/CdpElectronInspection.js +2 -2
  128. package/dist/browser/CdpElectronProvider.js +4 -5
  129. package/dist/browser/CdpElectronScriptEvents.js +2 -8
  130. package/dist/browser/CdpElectronScripts.js +4 -5
  131. package/dist/browser/CdpPageCaptureScripts.js +2 -3
  132. package/dist/browser/CdpSafeMetadata.js +10 -10
  133. package/dist/browser/CdpWebMcpDiscovery.js +16 -13
  134. package/dist/browser/PlaywrightBrowserScenarioProvider.js +64 -49
  135. package/dist/browser/PlaywrightElectronActiveActions.js +2 -56
  136. package/dist/browser/PlaywrightElectronActiveProvider.js +10 -6
  137. package/dist/browser/PlaywrightScenarioArtifacts.js +1 -1
  138. package/dist/browser/PlaywrightScenarioBrowser.js +269 -66
  139. package/dist/browser/PlaywrightScenarioEvents.js +1 -1
  140. package/dist/browser/PlaywrightScenarioSession.js +41 -32
  141. package/dist/browser/WebSourceMapFetcher.js +32 -6
  142. package/dist/browser/assets/ScenarioScriptCapture.js +8 -12
  143. package/dist/browser/assets/ScriptCaptureAdapters.js +1 -1
  144. package/dist/browser/history/CaptureFailures.js +6 -2
  145. package/dist/browser/history/MitmproxyCaptureAdapter.js +4 -2
  146. package/dist/catalogIdentity.js +0 -1
  147. package/dist/cli/analysisViewCommands.js +36 -0
  148. package/dist/cli/artifactCommands.js +11 -12
  149. package/dist/cli/coreAnalysisCommands.js +3 -3
  150. package/dist/cli/coreBinaryCommands.js +37 -28
  151. package/dist/cli/coreNativeCommands.js +9 -10
  152. package/dist/cli/electronCommands.js +12 -13
  153. package/dist/cli/interactiveSetup.js +6 -6
  154. package/dist/cli/javascriptApplicationAnalysis.js +2 -12
  155. package/dist/cli/jsonOutput.js +3 -2
  156. package/dist/cli/managedCommands.js +7 -8
  157. package/dist/cli/nativeCallCommands.js +1 -2
  158. package/dist/cli/omittableDefaults.js +50 -0
  159. package/dist/cli/processCommands.js +3 -2
  160. package/dist/cli/setupCommands.js +16 -15
  161. package/dist/cli/streamedJsonOutput.js +83 -4
  162. package/dist/cli/utilityCommands.js +10 -12
  163. package/dist/cli.js +19 -8
  164. package/dist/cliBrowserScenarioCommands.js +2 -2
  165. package/dist/cliCommandNames.js +1 -0
  166. package/dist/cliJsonFile.js +179 -0
  167. package/dist/cliJsonInput.js +60 -33
  168. package/dist/cliObservationOptions.js +4 -0
  169. package/dist/cliOutput.js +0 -38
  170. package/dist/composition/auxiliaryAnalysisProviders.js +30 -25
  171. package/dist/composition/binary.js +9 -9
  172. package/dist/composition/browserScenario.js +2 -1
  173. package/dist/composition/directAnalysis.js +20 -14
  174. package/dist/composition/electronScenario.js +1 -1
  175. package/dist/composition/optionalObservationProviders.js +12 -7
  176. package/dist/config/environment.js +6 -0
  177. package/dist/config/ghidraStartupTimeout.js +4 -9
  178. package/dist/config/homeDirectory.js +12 -0
  179. package/dist/config/mcpResponseBudget.js +9 -1
  180. package/dist/config/parseConfig.js +7 -3
  181. package/dist/config/parsers.js +19 -22
  182. package/dist/contracts/analysisViewToolContracts.js +56 -0
  183. package/dist/contracts/applicationToolContracts.js +5 -4
  184. package/dist/contracts/artifactComparisonExample.js +7 -7
  185. package/dist/contracts/artifactToolContracts.js +1 -1
  186. package/dist/contracts/browserScenarioToolContracts.js +1 -1
  187. package/dist/contracts/browserToolContracts.js +19 -15
  188. package/dist/contracts/enhancedInputs.js +2 -2
  189. package/dist/contracts/enhancedToolContracts.js +4 -3
  190. package/dist/contracts/errorSchemas.js +3 -1
  191. package/dist/contracts/evm/evmToolContracts.js +1 -1
  192. package/dist/contracts/functionComparisonExample.js +8 -0
  193. package/dist/contracts/functionWorkflowToolContracts.js +1 -1
  194. package/dist/contracts/inputSchemaPresentation.js +181 -0
  195. package/dist/contracts/investigationExamples.js +4 -3
  196. package/dist/contracts/javascript/electronToolContracts.js +3 -2
  197. package/dist/contracts/javascript/javascriptApplicationWorkflowExamples.js +3 -22
  198. package/dist/contracts/javascript/javascriptExportShapeComparisonExample.js +248 -0
  199. package/dist/contracts/javascript/javascriptRuntimeObservationToolContracts.js +1 -1
  200. package/dist/contracts/javascript/javascriptRuntimeReconciliationExample.js +8 -7
  201. package/dist/contracts/managed/managedToolContracts.js +8 -12
  202. package/dist/contracts/managed/managedWorkflowToolContracts.js +1 -1
  203. package/dist/contracts/mobileApplicationGraphExamples.js +8 -8
  204. package/dist/contracts/native/binaryDiagnosticsToolContracts.js +1 -1
  205. package/dist/contracts/native/nativeToolContracts.js +2 -2
  206. package/dist/contracts/officialToolContracts.js +2 -1
  207. package/dist/contracts/promptContracts.js +2 -2
  208. package/dist/contracts/providerSelection.js +1 -1
  209. package/dist/contracts/sessionLifecycleInputs.js +4 -3
  210. package/dist/contracts/sessionStatusContract.js +3 -2
  211. package/dist/contracts/sessionToolContracts.js +17 -4
  212. package/dist/contracts/sessionToolSchemas.js +4 -16
  213. package/dist/contracts/toolContracts.js +2 -0
  214. package/dist/contracts/toolEffects.js +1 -0
  215. package/dist/contracts/toolOutputSchemaGroups.js +138 -94
  216. package/dist/contracts/toolOutputSchemaPrimitives.js +13 -26
  217. package/dist/contracts/toolSchemaMetadata.js +18 -69
  218. package/dist/contracts/webNetworkCaptureToolContracts.js +1 -1
  219. package/dist/contracts/webRuntimeToolContracts.js +1 -1
  220. package/dist/contracts/webScriptToolContracts.js +1 -1
  221. package/dist/doctorRuntime.js +7 -5
  222. package/dist/domain/analysisErrorBase.js +5 -0
  223. package/dist/domain/analysisErrorCore.js +3 -0
  224. package/dist/domain/analysisErrorPresentation.js +22 -5
  225. package/dist/domain/analysisErrorProjection.js +24 -5
  226. package/dist/domain/analysisSnapshot.js +31 -31
  227. package/dist/domain/analysisView/analysisView.js +241 -0
  228. package/dist/domain/analysisView/analysisViewCoverage.js +19 -0
  229. package/dist/domain/analysisView/binaryLayoutView.js +159 -0
  230. package/dist/domain/analysisView/javascriptApplicationView.js +238 -0
  231. package/dist/domain/android/androidApplication.js +1 -1
  232. package/dist/domain/android/androidPartialObservation.js +36 -0
  233. package/dist/domain/apple/appleApplication.js +1 -1
  234. package/dist/domain/apple/dylibResolution.js +10 -3
  235. package/dist/domain/apple/interfaceBuilderGraph.js +0 -1
  236. package/dist/domain/apple/keyedArchive.js +26 -2
  237. package/dist/domain/artifactComparison.js +15 -6
  238. package/dist/domain/artifactGraph.js +17 -4
  239. package/dist/domain/artifactIdentity.js +8 -8
  240. package/dist/domain/artifactInspection.js +8 -8
  241. package/dist/domain/artifactInventoryEvidence.js +9 -16
  242. package/dist/domain/artifactOperationError.js +3 -3
  243. package/dist/domain/artifactPartialObservation.js +1 -0
  244. package/dist/domain/artifactPathSyntax.js +49 -0
  245. package/dist/domain/binaryTarget.js +39 -13
  246. package/dist/domain/browserCaptureComparison.js +13 -49
  247. package/dist/domain/browserCompleteness.js +3 -2
  248. package/dist/domain/browserNetworkEvidence.js +10 -4
  249. package/dist/domain/browserObservation.js +0 -1
  250. package/dist/domain/browserObservationSchemas.js +14 -3
  251. package/dist/domain/browserScenario.js +0 -1
  252. package/dist/domain/browserScenarioCapture.js +1 -2
  253. package/dist/domain/browserScenarioCaptureValues.js +2 -2
  254. package/dist/domain/browserScenarioDiff.js +0 -2
  255. package/dist/domain/browserScenarioDiffEvidence.js +0 -12
  256. package/dist/domain/browserScenarioDiffValues.js +2 -2
  257. package/dist/domain/browserScenarioNormalization.js +3 -3
  258. package/dist/domain/browserScenarioValues.js +6 -6
  259. package/dist/domain/callPath.js +15 -18
  260. package/dist/domain/callPathSchemas.js +2 -2
  261. package/dist/domain/canonicalDigest.js +7 -1
  262. package/dist/domain/canonicalOrdering.js +1 -13
  263. package/dist/domain/changedBehavior.js +5 -6
  264. package/dist/domain/comparisonSemantics.js +0 -5
  265. package/dist/domain/completionLedgerGeneration.js +2 -1
  266. package/dist/domain/configurationErrors.js +12 -0
  267. package/dist/domain/conformancePackage.js +4 -3
  268. package/dist/domain/digests.js +0 -3
  269. package/dist/domain/evidence.js +19 -40
  270. package/dist/domain/evidenceBundle.js +58 -42
  271. package/dist/domain/evidenceCompletionLedger.js +2 -1
  272. package/dist/domain/firmware/firmwareAnalysis.js +4 -3
  273. package/dist/domain/functionComparison.js +6 -6
  274. package/dist/domain/functionComparisonDimensions.js +120 -87
  275. package/dist/domain/functionComparisonNormalization.js +26 -36
  276. package/dist/domain/functionComparisonResults.js +3 -6
  277. package/dist/domain/functionComparisonSchemas.js +2 -8
  278. package/dist/domain/functionDossierEvidence.js +4 -38
  279. package/dist/domain/hopperValues.js +11 -15
  280. package/dist/domain/javascript/electronActiveObservation.js +29 -71
  281. package/dist/domain/javascript/electronObservation.js +14 -3
  282. package/dist/domain/javascript/electronStaticAnalysisBrowser.js +12 -11
  283. package/dist/domain/javascript/electronStaticAnalysisIpc.js +11 -2
  284. package/dist/domain/javascript/electronStaticAnalysisNative.js +7 -4
  285. package/dist/domain/javascript/electronStaticAnalysisValues.js +8 -4
  286. package/dist/domain/javascript/javascriptApplicationAnalysis.js +3 -1
  287. package/dist/domain/javascript/javascriptApplicationChangeGraph.js +12 -8
  288. package/dist/domain/javascript/javascriptApplicationEvidenceSchemas.js +6 -0
  289. package/dist/domain/javascript/javascriptApplicationGraph.js +41 -16
  290. package/dist/domain/javascript/javascriptApplicationGraphSchemas.js +9 -2
  291. package/dist/domain/javascript/javascriptApplicationVersionComparison.js +4 -4
  292. package/dist/domain/javascript/javascriptApplicationVersionComparisonSchemas.js +37 -22
  293. package/dist/domain/javascript/javascriptApplicationVersionItems.js +50 -36
  294. package/dist/domain/javascript/javascriptApplicationVersionKeys.js +9 -8
  295. package/dist/domain/javascript/javascriptAstFingerprint.js +2 -2
  296. package/dist/domain/javascript/javascriptAstValues.js +22 -0
  297. package/dist/{application/javascript/JavaScriptReturnShapeProjection.js → domain/javascript/javascriptExportReturnShapeProjection.js} +4 -4
  298. package/dist/domain/javascript/javascriptExportShapeComparison.js +10 -3
  299. package/dist/domain/javascript/javascriptExportShapeComparisonIdentity.js +6 -1
  300. package/dist/domain/javascript/javascriptExportShapeComparisonSchemas.js +58 -22
  301. package/dist/domain/javascript/javascriptExportShapeSelection.js +7 -7
  302. package/dist/domain/javascript/javascriptExportShapeVariants.js +70 -16
  303. package/dist/domain/javascript/javascriptFeatureSeed.js +25 -3
  304. package/dist/domain/javascript/javascriptFeatureTrace.js +7 -6
  305. package/dist/domain/javascript/javascriptFeatureTraceSchemas.js +17 -9
  306. package/dist/domain/javascript/javascriptFeatureTraversal.js +4 -5
  307. package/dist/domain/javascript/javascriptNativeHandoff.js +7 -7
  308. package/dist/domain/javascript/javascriptRuntimeLoadState.js +0 -1
  309. package/dist/domain/javascript/javascriptRuntimeObservation.js +18 -7
  310. package/dist/domain/javascript/javascriptRuntimeReconciliation.js +12 -6
  311. package/dist/domain/javascript/javascriptRuntimeReconciliationActive.js +9 -8
  312. package/dist/domain/javascript/javascriptRuntimeReconciliationCaptureParsing.js +212 -0
  313. package/dist/domain/javascript/javascriptRuntimeReconciliationGraph.js +5 -4
  314. package/dist/domain/javascript/javascriptRuntimeReconciliationInputValidation.js +28 -0
  315. package/dist/domain/javascript/javascriptRuntimeReconciliationMatching.js +6 -6
  316. package/dist/domain/javascript/javascriptRuntimeReconciliationParsing.js +12 -222
  317. package/dist/domain/javascript/javascriptRuntimeReconciliationResult.js +2 -2
  318. package/dist/domain/javascript/javascriptRuntimeReconciliationRuntime.js +15 -4
  319. package/dist/domain/javascript/javascriptRuntimeReconciliationSchemas.js +2 -2
  320. package/dist/domain/javascript/javascriptRuntimeStaticCandidates.js +7 -7
  321. package/dist/domain/javascript/javascriptSemanticAnalysis.js +209 -11
  322. package/dist/domain/javascript/javascriptSemanticAsyncEffects.js +2 -1
  323. package/dist/domain/javascript/javascriptSemanticCallResolution.js +9 -7
  324. package/dist/domain/javascript/javascriptSemanticCalls.js +2 -1
  325. package/dist/domain/javascript/javascriptSemanticChildProcesses.js +4 -3
  326. package/dist/domain/javascript/javascriptSemanticCoverage.js +20 -0
  327. package/dist/domain/javascript/javascriptSemanticDataEffectHelpers.js +7 -9
  328. package/dist/domain/javascript/javascriptSemanticDataEffects.js +4 -11
  329. package/dist/domain/javascript/javascriptSemanticFingerprints.js +2 -2
  330. package/dist/domain/javascript/javascriptSemanticGraph.js +220 -71
  331. package/dist/domain/javascript/javascriptSemanticGraphSchemas.js +19 -1
  332. package/dist/domain/javascript/javascriptSemanticIr.js +0 -4
  333. package/dist/domain/javascript/javascriptSemanticIterationSources.js +106 -0
  334. package/dist/domain/javascript/javascriptSemanticMemberMutations.js +515 -74
  335. package/dist/domain/javascript/javascriptSemanticMutationInitializers.js +190 -0
  336. package/dist/domain/javascript/javascriptSemanticMutationValues.js +44 -36
  337. package/dist/domain/javascript/javascriptSemanticObjects.js +79 -42
  338. package/dist/domain/javascript/javascriptSemanticPrimitives.js +8 -14
  339. package/dist/domain/javascript/javascriptSemanticProjection.js +21 -16
  340. package/dist/domain/javascript/javascriptSemanticPromises.js +16 -21
  341. package/dist/domain/javascript/javascriptSemanticPropertyPaths.js +23 -0
  342. package/dist/domain/javascript/javascriptSemanticProvenance.js +3 -3
  343. package/dist/domain/javascript/javascriptSemanticQuery.js +8 -2
  344. package/dist/domain/javascript/javascriptSemanticQueryIdentity.js +3 -2
  345. package/dist/domain/javascript/javascriptSemanticQuerySchemas.js +8 -9
  346. package/dist/domain/javascript/javascriptSemanticRequireOrigin.js +16 -10
  347. package/dist/domain/javascript/javascriptSemanticResourceLimits.js +1 -1
  348. package/dist/domain/javascript/javascriptSemanticResources.js +1 -1
  349. package/dist/domain/javascript/javascriptSemanticReturns.js +55 -44
  350. package/dist/domain/javascript/javascriptSemanticSlots.js +72 -0
  351. package/dist/domain/javascript/javascriptSemanticTraversal.js +6 -1
  352. package/dist/domain/javascript/javascriptSemanticValues.js +180 -76
  353. package/dist/domain/javascript/javascriptSourceMapPaths.js +114 -0
  354. package/dist/domain/javascript/javascriptSourceParser.js +34 -9
  355. package/dist/domain/javascript/javascriptStaticAnalysisBundler.js +5 -6
  356. package/dist/domain/javascript/javascriptStaticAnalysisCalls.js +2 -1
  357. package/dist/domain/javascript/javascriptStaticAnalysisHelpers.js +26 -16
  358. package/dist/domain/javascript/sourceToBundleComparison.js +19 -8
  359. package/dist/domain/javascript/sourceToBundleSignals.js +53 -25
  360. package/dist/domain/jsonSerialization.js +109 -55
  361. package/dist/domain/jsonShape.js +46 -19
  362. package/dist/domain/localPath.js +10 -4
  363. package/dist/domain/managed/managedApplicationGraph.js +10 -6
  364. package/dist/domain/managed/managedApplicationGraphNodes.js +82 -57
  365. package/dist/domain/managed/managedArtifact.js +6 -4
  366. package/dist/domain/managed/managedMemberComparison.js +2 -9
  367. package/dist/domain/managed/managedMemberComparisonMatch.js +6 -7
  368. package/dist/domain/managed/managedNativeVerification.js +0 -2
  369. package/dist/domain/managed/managedNativeVerificationMatch.js +9 -3
  370. package/dist/domain/native/binaryLayout.js +2 -3
  371. package/dist/domain/native/nativeApiBoundary.js +1 -1
  372. package/dist/domain/native/nativeCallObservation.js +3 -3
  373. package/dist/domain/native/nativeInstruction.js +7 -0
  374. package/dist/domain/native/nativeValueFlow.js +5 -11
  375. package/dist/domain/native/objcSwiftMetadata.js +15 -17
  376. package/dist/domain/native/recordedCrash.js +2 -3
  377. package/dist/domain/offsetDateTime.js +17 -0
  378. package/dist/domain/process/processCapture.js +22 -20
  379. package/dist/domain/process/processCaptureCoverage.js +70 -0
  380. package/dist/domain/process/processCaptureExample.js +45 -1
  381. package/dist/domain/process/processCaptureParsing.js +1 -34
  382. package/dist/domain/process/processCaptureValidation.js +82 -13
  383. package/dist/domain/process/processComparison.js +39 -43
  384. package/dist/domain/process/processObservation.js +10 -2
  385. package/dist/domain/process/processScenario.js +24 -2
  386. package/dist/domain/process/processTraceComparison.js +0 -2
  387. package/dist/domain/process/processTraceDimensionProjection.js +1 -1
  388. package/dist/domain/process/processTraceEvaluation.js +19 -15
  389. package/dist/domain/process/processTraceSpecification.js +4 -7
  390. package/dist/domain/providerAdapterError.js +2 -0
  391. package/dist/domain/providerCleanupError.js +6 -2
  392. package/dist/domain/reconstructionCoverage.js +7 -3
  393. package/dist/domain/reconstructionObligationLedgerSchemas.js +2 -1
  394. package/dist/domain/reconstructionReadinessSchemas.js +2 -1
  395. package/dist/domain/reconstructionUnknowns.js +4 -3
  396. package/dist/domain/reconstructionVerification.js +6 -5
  397. package/dist/domain/reconstructionVerificationSchemas.js +2 -1
  398. package/dist/domain/referenceSourceGraph.js +27 -28
  399. package/dist/domain/referenceSourceImportParsing.js +34 -45
  400. package/dist/domain/residualUnknown.js +3 -2
  401. package/dist/domain/staticRuntimeCorrelation.js +4 -3
  402. package/dist/domain/stringPatterns.js +6 -0
  403. package/dist/domain/swiftSymbolClassification.js +66 -0
  404. package/dist/domain/symbolAnalysis.js +83 -20
  405. package/dist/domain/unicodeCodePointOrder.js +6 -0
  406. package/dist/domain/webBundleAnalyzerInspection.js +9 -1
  407. package/dist/domain/webCaptureDiff.js +71 -30
  408. package/dist/domain/webCaptureDiffSchemas.js +8 -11
  409. package/dist/domain/webEventListeners.js +3 -2
  410. package/dist/domain/webExecution.js +3 -2
  411. package/dist/domain/webInventory.js +3 -2
  412. package/dist/domain/webMcpDiscovery.js +4 -3
  413. package/dist/domain/webRuntime.js +0 -2
  414. package/dist/domain/webScriptExport.js +2 -2
  415. package/dist/dotnet/ManagedArtifactInspector.js +2 -19
  416. package/dist/dotnet/ManagedMemberInspector.js +12 -18
  417. package/dist/dotnet/ManagedMemberInspectorCore.js +47 -44
  418. package/dist/dotnet/ManagedMemberInstructionDecoder.js +1 -2
  419. package/dist/dotnet/ManagedMemberRows.js +75 -62
  420. package/dist/dotnet/ManagedMetadataInventory.js +16 -22
  421. package/dist/dotnet/ManagedMethodBodyReader.js +4 -0
  422. package/dist/dotnet/ManagedNativeBoundaryHelpers.js +109 -94
  423. package/dist/dotnet/ManagedNativeBoundaryInspector.js +12 -21
  424. package/dist/dotnet/ManagedReaderFailure.js +16 -0
  425. package/dist/dotnet/ManagedStaticProvider.js +13 -12
  426. package/dist/dotnet/ManagedStaticProviderMetadata.js +1 -4
  427. package/dist/evaluation/AgentEvaluationFixtures.js +250 -0
  428. package/dist/evaluation/AgentEvaluationReport.js +28 -0
  429. package/dist/evaluation/CodexAgentEval.js +12 -8
  430. package/dist/evaluation/KnownAnswerEvaluation.js +281 -0
  431. package/dist/evm/EvmoleInterfaceProvider.js +2 -1
  432. package/dist/filesystem/RegularFile.js +41 -0
  433. package/dist/firmware/FirmwareCommand.js +9 -5
  434. package/dist/firmware/FirmwareProvider.js +4 -4
  435. package/dist/generatedPackageMetadata.js +2 -2
  436. package/dist/ghidra/GhidraAnalysisProfile.js +3 -6
  437. package/dist/ghidra/GhidraClient.js +105 -36
  438. package/dist/ghidra/GhidraClientStartup.js +0 -2
  439. package/dist/ghidra/GhidraDoctor.js +6 -5
  440. package/dist/ghidra/GhidraFunctionValues.js +3 -5
  441. package/dist/ghidra/GhidraInstallation.js +151 -22
  442. package/dist/ghidra/GhidraJavaLaunch.js +6 -2
  443. package/dist/ghidra/GhidraLauncher.js +58 -26
  444. package/dist/ghidra/GhidraProvider.js +6 -2
  445. package/dist/ghidra/GhidraProviderCapabilities.js +6 -0
  446. package/dist/ghidra/GhidraProviderClient.js +13 -3
  447. package/dist/ghidra/GhidraSessionError.js +2 -0
  448. package/dist/ghidra/GhidraSessionRoot.js +39 -0
  449. package/dist/ghidra/extensions/GhidraExtensions.js +17 -10
  450. package/dist/ghidra/extensions/nativeaot/NativeAotAdapter.js +8 -2
  451. package/dist/hopper/BridgeLauncher.js +34 -45
  452. package/dist/hopper/HopperAnalysisProfile.js +3 -8
  453. package/dist/hopper/HopperCleanup.js +56 -27
  454. package/dist/hopper/HopperClient.js +86 -65
  455. package/dist/hopper/HopperMachOImage.js +3 -2
  456. package/dist/hopper/HopperProvider.js +16 -18
  457. package/dist/hopper/HopperRegexSearch.js +3 -6
  458. package/dist/hopper/HopperTargetLease.js +132 -49
  459. package/dist/hopper/LinuxPrivateDisplayProbe.js +6 -0
  460. package/dist/ida/IdaConfiguration.js +8 -3
  461. package/dist/ida/IdaInput.js +1 -7
  462. package/dist/ida/IdaMcpConnection.js +8 -4
  463. package/dist/ida/IdaOperationRunner.js +5 -3
  464. package/dist/ida/IdaProvider.js +8 -12
  465. package/dist/ida/IdaSessionClient.js +24 -20
  466. package/dist/ida/IdaWorkspace.js +12 -13
  467. package/dist/inspector/JavaScriptRuntimeScope.js +9 -5
  468. package/dist/inspector/V8InspectorCaptureProjection.js +47 -14
  469. package/dist/inspector/V8InspectorProvider.js +97 -35
  470. package/dist/javascript/recovery/WakaruCommand.js +7 -2
  471. package/dist/javascript/recovery/WakaruExecution.js +5 -2
  472. package/dist/main/shutdown.js +81 -29
  473. package/dist/main/startup.js +9 -2
  474. package/dist/main/transport.js +23 -3
  475. package/dist/main.js +11 -18
  476. package/dist/native/AppleMachoSelection.js +16 -6
  477. package/dist/native/AppleObjcDispatchFacets.js +3 -3
  478. package/dist/native/AppleObjcProperties.js +17 -7
  479. package/dist/native/CommandRunner.js +9 -7
  480. package/dist/native/LldbCallTracer.js +249 -77
  481. package/dist/native/NativeMacOSProvider.js +32 -17
  482. package/dist/native/NativeMacOSProviderMetadata.js +1 -2
  483. package/dist/native/NativeUiHelperRuntime.js +11 -2
  484. package/dist/native/NativeUiObservation.js +2 -2
  485. package/dist/native/pwntools/PwntoolsDecoder.js +2 -1
  486. package/dist/process/DarwinProcessRunTokenReader.js +16 -2
  487. package/dist/process/ExecFileOutput.js +88 -6
  488. package/dist/process/PrivateRuntimeRoot.js +10 -5
  489. package/dist/process/ProcessOwnership.js +1 -4
  490. package/dist/process/ProcessOwnershipObservation.js +18 -16
  491. package/dist/process/ProviderProcess.js +1 -3
  492. package/dist/process/capture/FilesystemSnapshot.js +131 -24
  493. package/dist/process/capture/ProcessCaptureError.js +13 -0
  494. package/dist/process/capture/ProcessCaptureLifecycle.js +148 -74
  495. package/dist/process/capture/ProcessFilesystemEffects.js +51 -6
  496. package/dist/process/capture/ProcessHarness.js +16 -33
  497. package/dist/process/capture/ProcessNormalization.js +20 -2
  498. package/dist/process/capture/ProcessSampling.js +25 -2
  499. package/dist/process/capture/TerminalRenderer.js +14 -0
  500. package/dist/process/snapshotEnvironment.js +14 -0
  501. package/dist/server/EvidenceMcpServer.js +25 -14
  502. package/dist/server/analysisAdmission.js +8 -0
  503. package/dist/server/createServer.js +71 -59
  504. package/dist/server/mcpClientMetadata.js +12 -5
  505. package/dist/server/promptCompletion.js +3 -8
  506. package/dist/server/registerAnalysisViewTool.js +15 -0
  507. package/dist/server/registerAndroidTools.js +2 -3
  508. package/dist/server/registerApplicationTools/compareExportShapes.js +6 -6
  509. package/dist/server/registerApplicationTools/compareSourceToBundle.js +4 -5
  510. package/dist/server/registerApplicationTools/compareVersions.js +4 -5
  511. package/dist/server/registerApplicationTools/coverage.js +1 -2
  512. package/dist/server/registerApplicationTools/helpers.js +4 -4
  513. package/dist/server/registerApplicationTools/obligationLedger.js +4 -5
  514. package/dist/server/registerApplicationTools/projectMobileApplicationGraph.js +3 -4
  515. package/dist/server/registerApplicationTools/traceFeature.js +4 -5
  516. package/dist/server/registerApplicationTools/traceSemantics.js +4 -5
  517. package/dist/server/registerArtifactComparisonTool.js +4 -5
  518. package/dist/server/registerArtifactTools.js +2 -2
  519. package/dist/server/registerBinaryDiagnosticsTools.js +2 -3
  520. package/dist/server/registerBrowserScenarioTool.js +3 -4
  521. package/dist/server/registerBrowserTools.js +13 -16
  522. package/dist/server/registerBundleComparisonTool.js +5 -6
  523. package/dist/server/registerCloseLifecycleTool.js +8 -7
  524. package/dist/server/registerElectronTools.js +10 -13
  525. package/dist/server/registerEnhancedTools.js +82 -77
  526. package/dist/server/registerEvidenceTools.js +54 -47
  527. package/dist/server/registerEvmTools.js +2 -3
  528. package/dist/server/registerFirmwareTools.js +2 -3
  529. package/dist/server/registerFunctionComparisonTool.js +7 -8
  530. package/dist/server/registerInvestigationTools.js +14 -15
  531. package/dist/server/registerJavaScriptRecoveryTool.js +2 -3
  532. package/dist/server/registerJavaScriptRuntimeObservationTools.js +6 -6
  533. package/dist/server/registerManagedTools.js +7 -4
  534. package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +5 -6
  535. package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +4 -5
  536. package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +6 -7
  537. package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +6 -7
  538. package/dist/server/registerOfficialTools.js +32 -41
  539. package/dist/server/registerProcessComparisonTool.js +8 -8
  540. package/dist/server/registerRecordedCrashTools.js +2 -3
  541. package/dist/server/registerSessionRecordTools.js +15 -19
  542. package/dist/server/registerSessionStatusTool.js +3 -4
  543. package/dist/server/registerSessionTools.js +19 -19
  544. package/dist/server/registerWebModuleTool.js +2 -3
  545. package/dist/server/registerWebNetworkCaptureTool.js +2 -3
  546. package/dist/server/registerWebRuntimeTools.js +4 -5
  547. package/dist/server/registerWebScriptTool.js +2 -3
  548. package/dist/server/registerWebSourceLocationTool.js +2 -3
  549. package/dist/server/toolResult.js +66 -94
  550. package/dist/server/toolResultEncoding.js +11 -10
  551. package/dist/windows/WindowsNativeLoader.js +1 -0
  552. package/dist/windows/WindowsOwnedProcess.js +60 -15
  553. package/dist/windows/WindowsPrivateRuntime.js +7 -8
  554. package/native/windows/README.md +3 -1
  555. package/native/windows/build/manifest.json +2 -2
  556. package/native/windows/build/rea-windows-x64.node +0 -0
  557. package/package.json +42 -30
  558. package/scripts/rea.mjs +3 -6
  559. package/skills/reverse-engineer-anything/SKILL.md +14 -13
  560. package/skills/reverse-engineer-anything/references/android-applications.md +6 -3
  561. package/skills/reverse-engineer-anything/references/evidence-workflows.md +8 -4
  562. package/skills/reverse-engineer-anything/references/javascript-applications.md +16 -6
  563. package/skills/reverse-engineer-anything/references/native-and-artifacts.md +18 -0
  564. package/dist/artifacts/inventory/policy.js +0 -2
  565. package/dist/config.js +0 -1
  566. package/dist/contracts/browserCaptureToolInputSchema.js +0 -43
  567. package/dist/contracts/process/processCaptureExample.js +0 -2
  568. package/dist/contracts/toolOutputSchemas.js +0 -2
  569. package/dist/domain/managed/managedApplicationGraphNodeCoverage.js +0 -6
  570. package/dist/main/reload.js +0 -12
  571. package/dist/main/state.js +0 -3
  572. package/dist/server/registerNativeTools.js +0 -6
  573. package/dist/server/sessionToolPolicies.js +0 -2
@@ -1,4 +1,4 @@
1
- import { canonicalDigest } from "../domain/comparisonSemantics.js";
1
+ import { digestCanonicalValue } from "../domain/canonicalDigest.js";
2
2
  import { BrowserObservationError } from "../domain/browserObservationError.js";
3
3
  import { CdpCaptureCompleteness } from "./CdpCaptureCompleteness.js";
4
4
  import { delayWithCancellation, numberValue, recordValue, recordsValue, requiredRecord, cdpStringValue, } from "./CdpCaptureValues.js";
@@ -176,7 +176,7 @@ const captureResources = async (context, completeness) => {
176
176
  ? null
177
177
  : Math.max(0, numberValue(resource.contentSize) ?? 0),
178
178
  };
179
- const resourceKey = `electron_resource_${canonicalDigest(item, "CDP capture")}`;
179
+ const resourceKey = `electron_resource_${digestCanonicalValue(item, "CDP capture")}`;
180
180
  if (seen.has(resourceKey))
181
181
  continue;
182
182
  seen.add(resourceKey);
@@ -8,14 +8,11 @@ import { discoverCdpEndpoint, hasCdpTargetWebSocket, } from "./CdpEndpoint.js";
8
8
  import { closeCdpTargetSession, openCdpTargetSession, } from "./CdpTargetSession.js";
9
9
  import { inspectCdpElectronPage } from "./CdpElectronInspection.js";
10
10
  import { authorizedElectronFile } from "./ElectronFileScope.js";
11
- /** Public identity committed by passive Electron observations. */
12
- export { CDP_ELECTRON_PROVIDER_IDENTITY } from "./providerIdentities.js";
13
11
  import { CDP_ELECTRON_PROVIDER_IDENTITY } from "./providerIdentities.js";
14
- const IDENTITY = CDP_ELECTRON_PROVIDER_IDENTITY;
15
12
  /** Passive Electron provider for local file pages exposed by loopback CDP. */
16
13
  export class CdpElectronProvider {
17
14
  identity() {
18
- return IDENTITY;
15
+ return CDP_ELECTRON_PROVIDER_IDENTITY;
19
16
  }
20
17
  async listTargets(input, options = {}) {
21
18
  try {
@@ -108,4 +105,6 @@ const providerError = (cause, operation) => cause instanceof BrowserObservationE
108
105
  ? new BrowserObservationError(operation, cause.reason, { cause })
109
106
  : cause instanceof AnalysisError
110
107
  ? cause
111
- : new ProviderAdapterError(IDENTITY.id, operation, { cause });
108
+ : new ProviderAdapterError(CDP_ELECTRON_PROVIDER_IDENTITY.id, operation, {
109
+ cause,
110
+ });
@@ -1,5 +1,5 @@
1
1
  import { CdpCaptureCompleteness } from "./CdpCaptureCompleteness.js";
2
- import { numberValue, recordValue, cdpStringValue, } from "./CdpCaptureValues.js";
2
+ import { numberValue, recordValue, scriptMetadataValues, cdpStringValue, } from "./CdpCaptureValues.js";
3
3
  /** Retain script/frame metadata from passive Electron events. */
4
4
  export const ingestElectronScriptEvent = (input) => {
5
5
  if (input.event.method === "Runtime.executionContextsCleared") {
@@ -33,9 +33,7 @@ export const ingestElectronScriptEvent = (input) => {
33
33
  input.scripts.push({
34
34
  scriptId,
35
35
  rawUrl,
36
- hash: cdpStringValue(value?.hash) ?? "",
37
- length: nonnegativeInteger(value?.length),
38
- isModule: value?.isModule === true,
36
+ ...scriptMetadataValues(value),
39
37
  language: cdpStringValue(value?.scriptLanguage) ?? null,
40
38
  executionContextKey: executionContextKey(value?.executionContextId),
41
39
  });
@@ -49,10 +47,6 @@ const retainExecutionContext = (event, frames) => {
49
47
  return;
50
48
  frames.set(contextKey, frameId);
51
49
  };
52
- const nonnegativeInteger = (value) => {
53
- const number = numberValue(value);
54
- return number === undefined ? 0 : Math.max(0, Math.trunc(number));
55
- };
56
50
  const executionContextKey = (value) => {
57
51
  const identifier = numberValue(value);
58
52
  return identifier !== undefined && Number.isSafeInteger(identifier)
@@ -1,7 +1,7 @@
1
- import { canonicalDigest } from "../domain/comparisonSemantics.js";
1
+ import { digestCanonicalValue } from "../domain/canonicalDigest.js";
2
2
  import { createWebTextArtifact } from "../domain/webContentArtifact.js";
3
3
  import { CdpCaptureCompleteness } from "./CdpCaptureCompleteness.js";
4
- import { requiredRecord, cdpStringValue } from "./CdpCaptureValues.js";
4
+ import { requiredScriptSource } from "./CdpCaptureValues.js";
5
5
  import { authorizedElectronFile } from "./ElectronFileScope.js";
6
6
  /** Normalize local script metadata and optionally approved source. */
7
7
  export const captureElectronScripts = async (input) => {
@@ -27,7 +27,7 @@ export const captureElectronScripts = async (input) => {
27
27
  is_module: script.isModule,
28
28
  language: script.language,
29
29
  };
30
- const scriptKey = `electron_script_${canonicalDigest(identity, "CDP capture")}`;
30
+ const scriptKey = `electron_script_${digestCanonicalValue(identity, "CDP capture")}`;
31
31
  if (seen.has(scriptKey))
32
32
  continue;
33
33
  seen.add(scriptKey);
@@ -54,8 +54,7 @@ const captureScriptSource = async (input, script) => {
54
54
  reason: "source capture was not selected",
55
55
  },
56
56
  };
57
- const result = requiredRecord(await input.connection.send("Debugger.getScriptSource", { scriptId: script.scriptId }, input.sessionId, input.signal));
58
- const text = cdpStringValue(result.scriptSource) ?? "";
57
+ const text = requiredScriptSource(await input.connection.send("Debugger.getScriptSource", { scriptId: script.scriptId }, input.sessionId, input.signal), "inspect_electron_page");
59
58
  return {
60
59
  source: {
61
60
  included: true,
@@ -1,5 +1,5 @@
1
1
  import { reconcileCapturedWebScript, stableWebScriptKey, } from "../domain/webInventory.js";
2
- import { requiredRecord, sourceExcluded, sourceResult, cdpStringValue, } from "./CdpCaptureValues.js";
2
+ import { requiredScriptSource, sourceExcluded, sourceResult, } from "./CdpCaptureValues.js";
3
3
  export const captureScripts = async (options) => {
4
4
  const { context, events, rawResources, resources, frameIds } = options;
5
5
  const state = {
@@ -42,8 +42,7 @@ const buildScriptDraft = async (script, state) => {
42
42
  };
43
43
  const captureScriptSource = async (script, state) => {
44
44
  const { context } = state;
45
- const result = requiredRecord(await context.connection.send("Debugger.getScriptSource", { scriptId: script.scriptId }, context.sessionId, context.signal));
46
- const content = cdpStringValue(result.scriptSource) ?? "";
45
+ const content = requiredScriptSource(await context.connection.send("Debugger.getScriptSource", { scriptId: script.scriptId }, context.sessionId, context.signal), context.operation);
47
46
  return sourceResult(content);
48
47
  };
49
48
  const keyAndBuildInventory = (drafts, scriptCount) => {
@@ -56,7 +56,7 @@ const parseCsp = (value, baseUrl, allowedOrigins) => {
56
56
  for (const rawDirective of (value ?? "").split(";")) {
57
57
  const [rawName, ...tokens] = rawDirective.trim().split(/\s+/u);
58
58
  const name = (rawName ?? "").toLowerCase();
59
- if (!/^[a-z][a-z0-9-]*$/u.test(name))
59
+ if (!/^[a-z][a-z0-9\x2d]*$/u.test(name))
60
60
  continue;
61
61
  const sources = [];
62
62
  for (const token of tokens) {
@@ -79,9 +79,9 @@ const parseCsp = (value, baseUrl, allowedOrigins) => {
79
79
  };
80
80
  const cspSource = (token, baseUrl, allowedOrigins) => {
81
81
  const lower = token.toLowerCase();
82
- if (/^'[a-z0-9-]+'$/u.test(lower))
82
+ if (/^'[a-z0-9\x2d]+'$/u.test(lower))
83
83
  return { kind: "keyword", value: lower };
84
- if (/^[a-z][a-z0-9+.-]*:$/u.test(lower))
84
+ if (/^[a-z][a-z0-9+.\x2d]*:$/u.test(lower))
85
85
  return { kind: "scheme", value: lower };
86
86
  const hostOrigin = cspHostSourceOrigin(token, baseUrl);
87
87
  if (hostOrigin === undefined)
@@ -98,14 +98,14 @@ const cspSource = (token, baseUrl, allowedOrigins) => {
98
98
  * `undefined` when the token is not a host-source at all.
99
99
  */
100
100
  const cspHostSourceOrigin = (token, baseUrl) => {
101
- const match = /^(?:([a-z][a-z0-9+.-]*):\/\/)?([^/?#]+)(?:\/[^?#]*)?$/iu.exec(token);
101
+ const match = /^(?:([a-z][a-z0-9+.\x2d]*):\/\/)?([^\x2f?#]+)(?:\/[^?#]*)?$/iu.exec(token);
102
102
  const authority = match?.[2];
103
103
  if (authority === undefined || authority.length === 0)
104
104
  return undefined;
105
105
  const scheme = (match?.[1] ?? schemeOf(baseUrl))?.toLowerCase();
106
- if (scheme === undefined || !/^[a-z][a-z0-9+.-]*$/u.test(scheme))
106
+ if (scheme === undefined || !/^[a-z][a-z0-9+.\x2d]*$/u.test(scheme))
107
107
  return undefined;
108
- if (!/^(?:\*|(?:\*\.)?[a-z0-9-]+(?:\.[a-z0-9-]+)*\.?)(?::(?:\*|\d+))?$/iu.test(authority))
108
+ if (!/^(?:\*|(?:\*\.)?[a-z0-9\x2d]+(?:\.[a-z0-9\x2d]+)*\.?)(?::(?:\*|\d+))?$/iu.test(authority))
109
109
  return undefined;
110
110
  if (authority.includes("*"))
111
111
  return null;
@@ -194,7 +194,7 @@ const linkParameters = (value) => {
194
194
  const name = (separator < 0 ? raw : raw.slice(0, separator))
195
195
  .trim()
196
196
  .toLowerCase();
197
- if (!/^[a-z][a-z0-9-]*$/u.test(name))
197
+ if (!/^[a-z][a-z0-9\x2d]*$/u.test(name))
198
198
  continue;
199
199
  const parameter = separator < 0 ? "" : raw.slice(separator + 1).trim();
200
200
  parameters.set(name, unquote(parameter));
@@ -221,7 +221,7 @@ const permissionFeatures = (value) => [
221
221
  ...new Set((value ?? "")
222
222
  .split(",")
223
223
  .map((entry) => entry.split("=", 1)[0]?.trim().toLowerCase() ?? "")
224
- .filter((feature) => /^[a-z][a-z0-9-]*$/u.test(feature))),
224
+ .filter((feature) => /^[a-z][a-z0-9\x2d]*$/u.test(feature))),
225
225
  ].sort();
226
226
  const wellKnownHint = (url) => {
227
227
  try {
@@ -259,7 +259,7 @@ const referrerPolicy = (value) => {
259
259
  const token = raw.trim().toLowerCase();
260
260
  if (token === "")
261
261
  continue;
262
- if (!/^[a-z-]+$/u.test(token))
262
+ if (!/^[a-z\x2d]+$/u.test(token))
263
263
  return null;
264
264
  if (referrerPolicies.has(token))
265
265
  policy = token;
@@ -268,7 +268,7 @@ const referrerPolicy = (value) => {
268
268
  };
269
269
  const policyToken = (value) => {
270
270
  const token = (value ?? "").trim().toLowerCase();
271
- return /^[a-z][a-z0-9_.-]*$/u.test(token) ? token : null;
271
+ return /^[a-z][a-z0-9_.\x2d]*$/u.test(token) ? token : null;
272
272
  };
273
273
  const nonnegativeInteger = (value) => {
274
274
  const number = numberValue(value === undefined ? undefined : Number(value));
@@ -1,5 +1,7 @@
1
1
  import { createHash } from "node:crypto";
2
- import { inferJsonShape } from "../domain/jsonShape.js";
2
+ import { jsonValueSchema } from "../domain/jsonValue.js";
3
+ import { digestCanonicalValue } from "../domain/canonicalDigest.js";
4
+ import { compositeKey } from "../domain/unicodeCodePointOrder.js";
3
5
  import { CdpCaptureCompleteness } from "./CdpCaptureCompleteness.js";
4
6
  import { BrowserObservationError } from "../domain/browserObservationError.js";
5
7
  import { allowedSanitizedUrl, delayWithCancellation, numberValue, recordValue, recordsValue, cdpStringValue, } from "./CdpCaptureValues.js";
@@ -265,6 +267,10 @@ const normalizeTool = (value, input, frames, completeness) => {
265
267
  }
266
268
  const description = cdpStringValue(value.description) ?? "";
267
269
  const annotations = recordValue(value.annotations);
270
+ const declaration = jsonValueSchema.safeParse(value.inputSchema);
271
+ if (!declaration.success)
272
+ completeness.exclude("webmcp_tools", "invalid_protocol_value");
273
+ const schema = declaration.success ? declaration.data : null;
268
274
  return {
269
275
  tool_key: toolKey(frame.url, frameId, name),
270
276
  name,
@@ -275,7 +281,10 @@ const normalizeTool = (value, input, frames, completeness) => {
275
281
  declaration_kind: numberValue(value.backendNodeId) === undefined
276
282
  ? "imperative"
277
283
  : "declarative",
278
- input_schema_shape: schemaShape(value.inputSchema),
284
+ input_schema: schema,
285
+ input_schema_sha256: declaration.success
286
+ ? digestCanonicalValue(schema)
287
+ : null,
279
288
  annotations: {
280
289
  read_only: booleanOrNull(annotations?.readOnly),
281
290
  untrusted_content: booleanOrNull(annotations?.untrustedContent),
@@ -285,15 +294,6 @@ const normalizeTool = (value, input, frames, completeness) => {
285
294
  trust: "page-declared-untrusted",
286
295
  };
287
296
  };
288
- const schemaShape = (value) => {
289
- if (recordValue(value) === undefined)
290
- return null;
291
- const encoded = JSON.stringify(value);
292
- const shape = inferJsonShape(encoded);
293
- if (shape === null)
294
- throw new BrowserObservationError("inspect_web_page", "protocol_error");
295
- return shape;
296
- };
297
297
  const registrationSource = (stack, allowedOrigins) => {
298
298
  const frame = recordsValue(stack?.callFrames)[0];
299
299
  const url = allowedSanitizedUrl(frame?.url, allowedOrigins);
@@ -327,8 +327,11 @@ const buildWebMcpResult = (options) => {
327
327
  };
328
328
  const toolKey = (frameUrl, frameId, name) =>
329
329
  // Registrations without a known admitted frame are excluded above, so the
330
- // frame ID here always distinguishes owners and keys cannot collapse.
331
- `webmcp_${createHash("sha256").update(`${frameUrl}\0${frameId}\0${name}`).digest("hex")}`;
330
+ // frame ID here always distinguishes owners. Composite tuple keeps a NUL
331
+ // inside one field from collapsing two registrations before hashing.
332
+ `webmcp_${createHash("sha256")
333
+ .update(compositeKey([frameUrl, frameId, name]))
334
+ .digest("hex")}`;
332
335
  const booleanOrNull = (value) => typeof value === "boolean" ? value : null;
333
336
  const integerOrNull = (value) => {
334
337
  const number = numberValue(value);
@@ -1,17 +1,11 @@
1
- import { browserScenarioCaptureSchema, classifyBrowserScenarioCompleteness, browserScenarioStepSchema, browserStepArtifactsSchema, } from "../domain/browserScenarioCapture.js";
1
+ import { browserScenarioCaptureSchema, } from "../domain/browserScenarioCapture.js";
2
+ import { classifyBrowserScenarioCompleteness, browserScenarioStepSchema, browserStepArtifactsSchema, } from "../domain/browserScenarioCaptureValues.js";
2
3
  import { AnalysisError } from "../domain/analysisErrorBase.js";
3
4
  import { BrowserObservationError } from "../domain/browserObservationError.js";
4
5
  import { ProviderAdapterError } from "../domain/providerAdapterError.js";
5
6
  import { err, ok } from "../domain/result.js";
7
+ import { browserScenarioCleanupObservation, browserScenarioOperationFailure, browserScenarioCaptureData, } from "./BrowserScenarioPartialObservation.js";
6
8
  const OPERATION = "capture_browser_scenario";
7
- let defaultFactory;
8
- const lazyPlaywrightFactory = {
9
- async open(scenario, options) {
10
- defaultFactory ??= import("./PlaywrightScenarioSession.js").then(({ PlaywrightScenarioSessionFactory }) => new PlaywrightScenarioSessionFactory());
11
- return (await defaultFactory).open(scenario, options);
12
- },
13
- };
14
- export { PLAYWRIGHT_BROWSER_SCENARIO_PROVIDER_IDENTITY } from "./providerIdentities.js";
15
9
  import { PLAYWRIGHT_BROWSER_SCENARIO_PROVIDER_IDENTITY } from "./providerIdentities.js";
16
10
  const SNAPSHOT_KINDS = [
17
11
  "screenshot",
@@ -141,13 +135,13 @@ const globalCompleteness = (scenario, session, steps) => {
141
135
  missing.push("events");
142
136
  return classifyBrowserScenarioCompleteness(missing, truncated);
143
137
  };
144
- const runScenario = async (factory, scenario, options) => {
138
+ const runScenario = async (openSession, scenario, options) => {
145
139
  if (options.signal?.aborted === true)
146
140
  throw new BrowserObservationError(OPERATION, "cancelled");
147
141
  const startedAt = Date.now();
148
- const session = await factory.open(scenario, options.signal === undefined ? {} : { signal: options.signal });
142
+ const session = await openSession(scenario, options.signal === undefined ? {} : { signal: options.signal });
149
143
  const steps = [];
150
- let cleanup;
144
+ let operationOutcome = { ok: true };
151
145
  try {
152
146
  steps.push(await initialStep({
153
147
  session,
@@ -169,57 +163,78 @@ const runScenario = async (factory, scenario, options) => {
169
163
  failed ||= step.status !== "completed";
170
164
  }
171
165
  }
172
- finally {
173
- cleanup = await session.close();
166
+ catch (cause) {
167
+ operationOutcome = { ok: false, cause };
168
+ }
169
+ let cleanupOutcome;
170
+ try {
171
+ cleanupOutcome = { ok: true, cleanup: await session.close() };
172
+ }
173
+ catch (cause) {
174
+ cleanupOutcome = { ok: false, cause };
174
175
  }
175
- const events = session.events();
176
+ if (!cleanupOutcome.ok) {
177
+ const cleanup = browserScenarioCleanupObservation(cleanupOutcome.cause);
178
+ const partialObservation = {
179
+ kind: "browser-scenario-observation",
180
+ capture: browserScenarioCaptureData({
181
+ session,
182
+ scenario,
183
+ startedAt,
184
+ steps,
185
+ cleanup: "incomplete",
186
+ limitations: [
187
+ "Scenario observations are partial because browser cleanup could not be confirmed.",
188
+ ],
189
+ }),
190
+ };
191
+ if (!operationOutcome.ok)
192
+ throw browserScenarioOperationFailure(operationOutcome.cause, partialObservation, { cause: cleanupOutcome.cause });
193
+ throw new BrowserObservationError(OPERATION, "cleanup_failed", {
194
+ cause: cleanupOutcome.cause,
195
+ cleanup,
196
+ partialObservation,
197
+ detail: `Browser scenario cleanup could not be confirmed: ${cleanup.reason}. Collected steps and events are retained in partial_observation. Review the reported resources before retrying.`,
198
+ });
199
+ }
200
+ if (!operationOutcome.ok)
201
+ throw browserScenarioOperationFailure(operationOutcome.cause, {
202
+ kind: "browser-scenario-observation",
203
+ capture: browserScenarioCaptureData({
204
+ session,
205
+ scenario,
206
+ startedAt,
207
+ steps,
208
+ cleanup: cleanupOutcome.cleanup,
209
+ limitations: [
210
+ "Scenario capture ended after an operation failed; uncollected steps are not represented.",
211
+ ],
212
+ }),
213
+ });
176
214
  const completeness = globalCompleteness(scenario, session, steps);
177
215
  return browserScenarioCaptureSchema.parse({
178
- browser: {
179
- mode: session.mode,
180
- process_ownership: session.processOwnership,
181
- cleanup,
182
- product: session.product,
183
- version: session.version,
184
- },
185
- scenario: {
186
- start_origin: new URL(scenario.start_url.url).origin,
187
- action_count: scenario.actions.length,
188
- secret_references: scenario.secrets.map(({ secret_id: id }) => id).sort(),
189
- network_content: scenario.capture.network,
190
- },
191
- duration_ms: Date.now() - startedAt,
192
- steps,
193
- events,
216
+ ...browserScenarioCaptureData({
217
+ session,
218
+ scenario,
219
+ startedAt,
220
+ steps,
221
+ cleanup: cleanupOutcome.cleanup,
222
+ }),
194
223
  completeness,
195
- limitations: [
196
- "Event sequence records provider receipt order; simultaneous browser causality is not inferred.",
197
- "Network content is retained only when selected; response bytes are browser-decoded, not compressed wire bytes.",
198
- "Request bytes are limited to what Playwright exposes; not_exposed does not establish body absence or multipart file coverage.",
199
- "Network content reads settle within 5 seconds each and never wait for unfinished responses or refetch them.",
200
- "Playwright scenario events do not expose request initiator stacks; receipt order does not prove causality.",
201
- "Storage values are hashed only after declared-secret redaction.",
202
- ...(session.eventLimitations?.() ?? []),
203
- ...(session.mode === "connect"
204
- ? [
205
- "CDP attachment cannot recover pre-attach events or guarantee launch-time context options.",
206
- ]
207
- : []),
208
- ],
209
224
  });
210
225
  };
211
226
  /** Controlled Playwright/CDP scenario driver with exact process ownership. */
212
227
  export class PlaywrightBrowserScenarioProvider {
213
- factory;
214
- constructor(factory = lazyPlaywrightFactory) {
215
- this.factory = factory;
228
+ openSession;
229
+ constructor(openSession) {
230
+ this.openSession = openSession;
216
231
  }
217
232
  identity() {
218
233
  return PLAYWRIGHT_BROWSER_SCENARIO_PROVIDER_IDENTITY;
219
234
  }
220
235
  async captureScenario(scenario, options = {}) {
221
236
  try {
222
- return ok(await runScenario(this.factory, scenario, options));
237
+ return ok(await runScenario(this.openSession, scenario, options));
223
238
  }
224
239
  catch (cause) {
225
240
  if (cause instanceof AnalysisError)
@@ -1,63 +1,9 @@
1
1
  import { z } from "zod";
2
2
  import { BrowserObservationError } from "../domain/browserObservationError.js";
3
+ import { electronActiveTimelineEventSchema, } from "../domain/javascript/electronActiveObservation.js";
3
4
  const OPERATION = "capture_electron_scenario";
4
- const hookEventSchema = z.strictObject({
5
- sequence: z.number().int().min(1),
6
- correlation_id: z.string().nullable(),
7
- kind: z.enum([
8
- "main-handler-invocation",
9
- "main-event-invocation",
10
- "utility-process-fork",
11
- "utility-process-message",
12
- "ipc-main-to-renderer",
13
- "ipc-utility-to-main",
14
- "ipc-renderer-send",
15
- "ipc-renderer-invoke",
16
- "ipc-renderer-post-message",
17
- "app-lifecycle",
18
- "window-lifecycle",
19
- "web-contents-lifecycle",
20
- "navigation",
21
- "shell-attempt",
22
- "process-lifecycle",
23
- "permission",
24
- "popup-attempt",
25
- "download",
26
- "protocol",
27
- "preload",
28
- "native-addon",
29
- "updater",
30
- "error",
31
- ]),
32
- event: z.string().nullable(),
33
- phase: z.enum(["attempted", "completed", "blocked", "failed", "observed"]),
34
- channel: z.string().nullable(),
35
- direction: z
36
- .enum([
37
- "renderer-to-main",
38
- "main-to-renderer",
39
- "main-to-utility",
40
- "utility-to-main",
41
- ])
42
- .nullable(),
43
- sender: z.string().nullable(),
44
- receiver: z.string().nullable(),
45
- frame: z.string().nullable(),
46
- target: z.string().nullable(),
47
- argument_shapes: z.array(z.string()),
48
- result_shape: z.string().nullable(),
49
- process_type: z.string().nullable(),
50
- source: z.string(),
51
- capture_method: z.enum(["api-wrapper", "event-emitter", "process-hook"]),
52
- artifact_path: z.string().nullable(),
53
- artifact_sha256: z
54
- .string()
55
- .regex(/^[a-f0-9]{64}$/u)
56
- .nullable(),
57
- error: z.boolean(),
58
- });
59
5
  const hookSnapshotSchema = z.strictObject({
60
- events: z.array(hookEventSchema),
6
+ events: z.array(electronActiveTimelineEventSchema),
61
7
  retention_budget_bytes: z.number().int().min(0),
62
8
  estimated_retained_bytes: z.number().int().min(0),
63
9
  event_serialized_byte_upper_bound: z.number().int().min(0),
@@ -14,12 +14,16 @@ import { runElectronActions, readApplicationState, runWithExecutionLimits, } fro
14
14
  import { projectElectronActiveCapture } from "./PlaywrightElectronActiveProjection.js";
15
15
  const OPERATION = "capture_electron_scenario";
16
16
  const STARTUP_TIMEOUT_MS = 60_000;
17
- /** Public identity for provider-owned Electron runtime experiments. */
18
- export { PLAYWRIGHT_ELECTRON_ACTIVE_PROVIDER_IDENTITY } from "./providerIdentities.js";
19
17
  import { PLAYWRIGHT_ELECTRON_ACTIVE_PROVIDER_IDENTITY } from "./providerIdentities.js";
20
18
  const hookPath = fileURLToPath(new URL("../../scripts/electron-active-hook.cjs", import.meta.url));
21
19
  /** Launch an owned Electron application through the official Playwright API. */
22
20
  export class PlaywrightElectronActiveProvider {
21
+ environment;
22
+ launch;
23
+ constructor(environment, launch = (options) => electron.launch(options)) {
24
+ this.environment = environment;
25
+ this.launch = launch;
26
+ }
23
27
  identity() {
24
28
  return PLAYWRIGHT_ELECTRON_ACTIVE_PROVIDER_IDENTITY;
25
29
  }
@@ -42,10 +46,10 @@ export class PlaywrightElectronActiveProvider {
42
46
  const captureBaseline = await systemProcessOwnershipHost.captureBaseline?.(options.signal);
43
47
  if (options.signal?.aborted)
44
48
  throw new BrowserObservationError(OPERATION, "cancelled");
45
- application = await electron.launch({
49
+ application = await this.launch({
46
50
  executablePath: paths.executable,
47
51
  cwd: paths.root,
48
- env: safeElectronEnvironment(runId),
52
+ env: safeElectronEnvironment(this.environment, runId),
49
53
  args: ["-r", hookPath, paths.application, ...input.args],
50
54
  timeout: Math.max(1, startupDeadline - Date.now()),
51
55
  });
@@ -258,7 +262,7 @@ const canonicalPaths = async (input) => {
258
262
  : await realpath(input.application_root);
259
263
  return { executable, application, root };
260
264
  };
261
- const safeElectronEnvironment = (runId) => Object.fromEntries([
265
+ const safeElectronEnvironment = (environment, runId) => Object.fromEntries([
262
266
  ...[
263
267
  "HOME",
264
268
  "LANG",
@@ -269,7 +273,7 @@ const safeElectronEnvironment = (runId) => Object.fromEntries([
269
273
  "DISPLAY",
270
274
  "WAYLAND_DISPLAY",
271
275
  ]
272
- .map((name) => [name, process.env[name]])
276
+ .map((name) => [name, environment[name]])
273
277
  .filter((entry) => entry[1] !== undefined),
274
278
  ["REA_PROCESS_RUN_ID", runId],
275
279
  ]);
@@ -1,6 +1,6 @@
1
1
  import { createHash } from "node:crypto";
2
2
  import { z } from "zod";
3
- import { browserStepArtifactsSchema, } from "../domain/browserScenarioCapture.js";
3
+ import { browserStepArtifactsSchema, } from "../domain/browserScenarioCaptureValues.js";
4
4
  const historyValueSchema = z.strictObject({
5
5
  length: z.number().int().min(0),
6
6
  navigation_entries: z.array(z.strictObject({