rea-agents 3.0.0 → 3.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 (628) hide show
  1. package/README.md +83 -108
  2. package/bridge/ghidra/ReaGhidraBridge.java +609 -841
  3. package/bridge/hopper_bridge.py +99 -344
  4. package/dist/application/AbortablePromise.js +6 -3
  5. package/dist/application/AnalysisContextQueries.js +21 -9
  6. package/dist/application/AnalysisSnapshotCache.js +0 -1
  7. package/dist/application/AnalysisSnapshotFiles.js +7 -7
  8. package/dist/application/AndroidApplicationService.js +1 -1
  9. package/dist/application/AppleApplicationService.js +1 -1
  10. package/dist/application/ArtifactExtraction.js +35 -54
  11. package/dist/application/ArtifactExtractionDestination.js +17 -0
  12. package/dist/application/ArtifactGraphConstruction.js +2 -17
  13. package/dist/application/ArtifactInventory/classify.js +2 -6
  14. package/dist/application/ArtifactInventory/hash.js +2 -20
  15. package/dist/application/ArtifactInventory/policy.js +17 -0
  16. package/dist/application/ArtifactInventory/reader.js +1 -4
  17. package/dist/application/ArtifactInventory/scanCanonical.js +8 -15
  18. package/dist/application/ArtifactInventory/scanReader.js +76 -58
  19. package/dist/application/ArtifactInventory/types.js +1 -5
  20. package/dist/application/ArtifactInventory.js +6 -14
  21. package/dist/application/AuthorizedArtifactInventory.js +3 -13
  22. package/dist/application/BinarySession.js +54 -28
  23. package/dist/application/BinarySessionComposition.js +0 -11
  24. package/dist/application/BinarySessionOpen.js +2 -1
  25. package/dist/application/BinarySessionRecords.js +24 -86
  26. package/dist/application/BinarySessionStatus.js +16 -21
  27. package/dist/application/BinaryTargetResolver.js +216 -0
  28. package/dist/application/BrowserEvidence.js +39 -57
  29. package/dist/application/BrowserObservationService.js +3 -6
  30. package/dist/application/BrowserScenarioCaptureService.js +3 -6
  31. package/dist/application/BrowserScenarioEvidence.js +3 -3
  32. package/dist/application/CallPathTracing.js +2 -36
  33. package/dist/application/CapabilityClientRequirements.js +26 -0
  34. package/dist/application/CapabilityInventory.js +143 -77
  35. package/dist/application/ClientConfigurationDocument.js +27 -0
  36. package/dist/application/ClientRegistrationStatus.js +16 -13
  37. package/dist/application/CommandShimReplay.js +14 -1
  38. package/dist/application/DirectAnalysis.js +22 -46
  39. package/dist/application/DirectAnalysisStatus.js +5 -61
  40. package/dist/application/Doctor.js +11 -32
  41. package/dist/application/DoctorDiagnostics.js +1 -2
  42. package/dist/application/DoctorScope.js +1 -1
  43. package/dist/application/ElectronActiveEvidence.js +50 -0
  44. package/dist/application/ElectronActiveObservationPort.js +1 -0
  45. package/dist/application/ElectronActiveObservationService.js +78 -0
  46. package/dist/application/ElectronBoundaryAnalysis.js +7 -8
  47. package/dist/application/ElectronBoundaryGraphContext.js +1 -1
  48. package/dist/application/ElectronBoundaryGraphIpc.js +3 -3
  49. package/dist/application/ElectronBoundaryGraphNative.js +1 -2
  50. package/dist/application/ElectronBoundaryGraphWindows.js +6 -8
  51. package/dist/application/ElectronEvidence.js +4 -7
  52. package/dist/application/ElectronObservationService.js +5 -9
  53. package/dist/application/EnhancedLiteralTracing.js +42 -65
  54. package/dist/application/EnhancedTools.js +98 -64
  55. package/dist/application/EvidenceBundleCommands.js +16 -12
  56. package/dist/application/EvidenceBundleFiles.js +9 -15
  57. package/dist/application/EvidenceLedger.js +14 -42
  58. package/dist/application/FilesystemSnapshot.js +2 -3
  59. package/dist/application/InterfaceBuilderAnalysis.js +266 -0
  60. package/dist/application/InventoryProjectionEvidence.js +4 -2
  61. package/dist/application/InvestigationProviders.js +1 -1
  62. package/dist/application/JavaScriptApplicationEvidence.js +2 -5
  63. package/dist/application/JavaScriptApplicationEvidenceGraph.js +6 -10
  64. package/dist/application/JavaScriptApplicationService.js +6 -29
  65. package/dist/application/JavaScriptApplicationWorkflowEvidence.js +5 -5
  66. package/dist/application/JavaScriptApplicationWorkflowService.js +0 -8
  67. package/dist/application/JavaScriptArtifactAnalysis.js +38 -127
  68. package/dist/application/JavaScriptArtifactFiles.js +67 -107
  69. package/dist/application/JavaScriptArtifactGraphAccumulator.js +0 -7
  70. package/dist/application/JavaScriptArtifactGraphBuilder.js +7 -58
  71. package/dist/application/JavaScriptArtifactGraphBundlers.js +1 -6
  72. package/dist/application/JavaScriptArtifactGraphContext.js +12 -39
  73. package/dist/application/JavaScriptArtifactGraphDocuments.js +4 -11
  74. package/dist/application/JavaScriptArtifactGraphEvidence.js +0 -14
  75. package/dist/application/JavaScriptArtifactGraphFindings.js +3 -3
  76. package/dist/application/JavaScriptArtifactGraphStructure.js +16 -17
  77. package/dist/application/JavaScriptArtifactPathResolution.js +61 -49
  78. package/dist/application/JavaScriptArtifactReconstruction.js +5 -10
  79. package/dist/application/JavaScriptArtifactReconstructionInput.js +2 -14
  80. package/dist/application/JavaScriptJsonModules.js +2 -2
  81. package/dist/application/JavaScriptModuleRelationships.js +22 -27
  82. package/dist/application/JavaScriptReplayPermission.js +1 -1
  83. package/dist/application/JavaScriptReplayPlanning.js +9 -3
  84. package/dist/application/JavaScriptReplayService.js +29 -47
  85. package/dist/application/JavaScriptReturnShapeProjection.js +12 -42
  86. package/dist/application/JavaScriptRuntimeObservationEvidence.js +7 -8
  87. package/dist/application/JavaScriptRuntimeObservationService.js +4 -8
  88. package/dist/application/JavaScriptRuntimeReconciliationEvidence.js +2 -3
  89. package/dist/application/JavaScriptSemanticGraphBuilder.js +11 -41
  90. package/dist/application/JavaScriptSemanticGraphConstruction.js +5 -29
  91. package/dist/application/JavaScriptSemanticGraphEvidence.js +1 -1
  92. package/dist/application/JavaScriptSemanticGraphFingerprintProjection.js +1 -1
  93. package/dist/application/JavaScriptSemanticGraphFlowProjection.js +0 -13
  94. package/dist/application/JavaScriptSemanticGraphProjection.js +1 -3
  95. package/dist/application/JavaScriptSemanticTraceService.js +1 -10
  96. package/dist/application/JsonFiles.js +79 -0
  97. package/dist/application/LinuxHopper.js +11 -9
  98. package/dist/application/LoopbackReplay.js +26 -23
  99. package/dist/application/LoopbackReplayRecorder.js +29 -1
  100. package/dist/application/ManagedApplicationGraphService.js +1 -2
  101. package/dist/application/ManagedMemberComparisonService.js +11 -41
  102. package/dist/application/ManagedNativeVerificationService.js +1 -2
  103. package/dist/application/ManagedReconstructionService.js +1 -1
  104. package/dist/application/ManagedRuntimeCorrelationService.js +14 -13
  105. package/dist/application/NativeApiInspection.js +2 -7
  106. package/dist/application/NativeUiActionTrace.js +394 -0
  107. package/dist/application/NodeRuntimeCharacterizationService.js +11 -16
  108. package/dist/application/PermissionAuthority.js +15 -7
  109. package/dist/application/PermissionFailure.js +5 -0
  110. package/dist/application/ProcessCaptureAuthority.js +5 -7
  111. package/dist/application/ProcessCaptureJournal.js +3 -2
  112. package/dist/application/ProcessCaptureLifecycle.js +10 -12
  113. package/dist/application/ProcessCheckpoints.js +29 -11
  114. package/dist/application/ProcessCli.js +8 -17
  115. package/dist/application/ProcessEvidence.js +5 -7
  116. package/dist/application/ProcessHarness.js +60 -20
  117. package/dist/application/ProcessNormalization.js +2 -1
  118. package/dist/application/ProcessReactiveCoordinator.js +2 -4
  119. package/dist/application/ProcessReactiveEffects.js +9 -3
  120. package/dist/application/ProcessReactiveHarness.js +13 -7
  121. package/dist/application/ProcessSampling.js +2 -4
  122. package/dist/application/ProcessTimer.js +39 -0
  123. package/dist/application/ProjectPermissionStore.js +39 -95
  124. package/dist/application/RealHopperAssertions.js +20 -66
  125. package/dist/application/ReconstructionCoverageService.js +12 -58
  126. package/dist/application/ReconstructionObligationAuthority.js +2 -2
  127. package/dist/application/ReconstructionObligationCandidates.js +4 -4
  128. package/dist/application/ReconstructionObligationLedgerEvaluation.js +8 -15
  129. package/dist/application/ReconstructionObligationLedgerProjection.js +3 -7
  130. package/dist/application/ReconstructionObligationLedgerService.js +19 -38
  131. package/dist/application/ReferenceSourceImport.js +21 -47
  132. package/dist/application/ReferenceSourceImportEntries.js +2 -4
  133. package/dist/application/ReferenceSourceImportPolicy.js +5 -32
  134. package/dist/application/ReferenceSourceImportTypes.js +0 -16
  135. package/dist/application/RuntimeExecutableDiagnostics.js +55 -29
  136. package/dist/application/SessionProviderRouter.js +2 -2
  137. package/dist/application/Setup.js +1 -3
  138. package/dist/application/SetupClientConfiguration.js +22 -88
  139. package/dist/application/SetupRegistrationEnvironment.js +0 -7
  140. package/dist/application/StoreFileLock.js +119 -0
  141. package/dist/application/TerminalRenderer.js +2 -3
  142. package/dist/application/Uninstall.js +9 -14
  143. package/dist/application/UnknownEvidence.js +1 -1
  144. package/dist/application/WindowsCapabilities.js +5 -4
  145. package/dist/artifacts/ArtifactPaths.js +2 -5
  146. package/dist/artifacts/ArtifactProvider.js +43 -67
  147. package/dist/artifacts/DirectoryArtifactReader.js +13 -8
  148. package/dist/artifacts/MachOSliceArtifactReader.js +1 -5
  149. package/dist/artifacts/NativeDmgArtifactReader.js +11 -11
  150. package/dist/artifacts/NibArchive.js +269 -0
  151. package/dist/artifacts/SafeOutputTree.js +21 -31
  152. package/dist/browser/BrowserProcessStartup.js +1 -2
  153. package/dist/browser/CdpAuthorizedMainFrame.js +16 -0
  154. package/dist/browser/CdpBrowserProvider.js +3 -13
  155. package/dist/browser/CdpCanonicalJsonDigest.js +9 -0
  156. package/dist/browser/CdpCaptureDocuments.js +28 -76
  157. package/dist/browser/CdpCaptureEventBodyShapes.js +13 -33
  158. package/dist/browser/CdpCaptureEventHandlers.js +22 -87
  159. package/dist/browser/CdpCaptureEvents.js +2 -8
  160. package/dist/browser/CdpCaptureStorage.js +9 -20
  161. package/dist/browser/CdpCaptureStorageFingerprints.js +85 -95
  162. package/dist/browser/CdpCaptureValues.js +21 -21
  163. package/dist/browser/CdpConnection.js +10 -25
  164. package/dist/browser/CdpElectronInspection.js +29 -51
  165. package/dist/browser/CdpElectronProvider.js +10 -35
  166. package/dist/browser/CdpElectronScriptEvents.js +8 -16
  167. package/dist/browser/CdpElectronScripts.js +6 -35
  168. package/dist/browser/CdpElectronWorkers.js +6 -10
  169. package/dist/browser/CdpEndpoint.js +25 -41
  170. package/dist/browser/CdpObservationSession.js +14 -26
  171. package/dist/browser/CdpPageCapture.js +34 -48
  172. package/dist/browser/CdpPageCaptureScripts.js +1 -19
  173. package/dist/browser/CdpPageCaptureWorkers.js +6 -10
  174. package/dist/browser/CdpSafeMetadata.js +19 -22
  175. package/dist/browser/CdpScreenshot.js +3 -5
  176. package/dist/browser/CdpTargetSession.js +1 -2
  177. package/dist/browser/CdpWebMcpDiscovery.js +13 -22
  178. package/dist/browser/ElectronFileScope.js +8 -19
  179. package/dist/browser/JavaScriptRuntimeScope.js +10 -10
  180. package/dist/browser/PlaywrightBrowserScenarioProvider.js +31 -64
  181. package/dist/browser/PlaywrightElectronActiveActions.js +309 -0
  182. package/dist/browser/PlaywrightElectronActiveProvider.js +274 -0
  183. package/dist/browser/PlaywrightExecutionBoundary.js +16 -5
  184. package/dist/browser/PlaywrightScenarioActions.js +3 -7
  185. package/dist/browser/PlaywrightScenarioArtifacts.js +23 -92
  186. package/dist/browser/PlaywrightScenarioBrowser.js +7 -9
  187. package/dist/browser/PlaywrightScenarioEvents.js +45 -94
  188. package/dist/browser/PlaywrightScenarioSession.js +18 -34
  189. package/dist/browser/PngVisualDiff.js +22 -14
  190. package/dist/browser/SensitiveTextCapture.js +1 -18
  191. package/dist/browser/V8InspectorCaptureProjection.js +7 -7
  192. package/dist/browser/V8InspectorEndpoint.js +12 -14
  193. package/dist/browser/V8InspectorProvider.js +20 -61
  194. package/dist/browser/WebSourceMapFetcher.js +56 -176
  195. package/dist/catalogIdentity.js +12 -60
  196. package/dist/cli/artifactCommands.js +49 -77
  197. package/dist/cli/coreAnalysisCommands.js +83 -133
  198. package/dist/cli/javascriptApplicationAnalysis.js +1 -9
  199. package/dist/cli/managedCommands.js +6 -271
  200. package/dist/cli/setupCommands.js +3 -12
  201. package/dist/cli/utilityCommands.js +7 -41
  202. package/dist/cli.js +0 -2
  203. package/dist/cliApplicationCommands.js +44 -114
  204. package/dist/cliBrowserAdvancedCommands.js +12 -102
  205. package/dist/cliBrowserCommands.js +19 -124
  206. package/dist/cliBrowserContext.js +30 -0
  207. package/dist/cliCommandNames.js +5 -5
  208. package/dist/cliElectronCommands.js +49 -71
  209. package/dist/cliEvidenceCommands.js +8 -77
  210. package/dist/cliJavaScriptRuntimeCommands.js +18 -92
  211. package/dist/cliJsonInput.js +4 -14
  212. package/dist/cliObservationOptions.js +11 -92
  213. package/dist/cliPolicyCommands.js +2 -16
  214. package/dist/cliProcessCommands.js +3 -3
  215. package/dist/cliSetup.js +0 -13
  216. package/dist/config/browserScenario.js +77 -0
  217. package/dist/config/electronAutomation.js +35 -0
  218. package/dist/config/environment.js +6 -9
  219. package/dist/config/javascriptReplay.js +41 -0
  220. package/dist/config/managedRuntime.js +25 -0
  221. package/dist/config/parseConfig.js +56 -232
  222. package/dist/config/parsers.js +16 -28
  223. package/dist/config/passiveObservation.js +87 -0
  224. package/dist/config/permissions.js +0 -7
  225. package/dist/config/processCapture.js +47 -0
  226. package/dist/contracts/analysisSearchContract.js +2 -5
  227. package/dist/contracts/applicationToolContracts.js +58 -114
  228. package/dist/contracts/applicationWorkflowInputContracts.js +29 -114
  229. package/dist/contracts/artifactComparisonExample.js +58 -60
  230. package/dist/contracts/artifactToolContracts.js +37 -91
  231. package/dist/contracts/browserScenarioToolContracts.js +6 -51
  232. package/dist/contracts/browserToolContracts.js +10 -75
  233. package/dist/contracts/electronToolContracts.js +27 -98
  234. package/dist/contracts/enhancedInputs.js +31 -78
  235. package/dist/contracts/errorSchemas.js +0 -1
  236. package/dist/contracts/functionComparisonExample.js +10 -24
  237. package/dist/contracts/functionInstructionContract.js +1 -3
  238. package/dist/contracts/functionWorkflowToolContracts.js +4 -5
  239. package/dist/contracts/hopperMemoryContracts.js +3 -3
  240. package/dist/contracts/investigationExamples.js +14 -11
  241. package/dist/contracts/javascriptApplicationWorkflowExamples.js +12 -19
  242. package/dist/contracts/javascriptRuntimeObservationToolContracts.js +2 -20
  243. package/dist/contracts/javascriptRuntimeReconciliationExample.js +45 -12
  244. package/dist/contracts/managedToolContracts.js +10 -104
  245. package/dist/contracts/managedWorkflowExamples.js +77 -125
  246. package/dist/contracts/managedWorkflowToolContracts.js +51 -74
  247. package/dist/contracts/nativeToolContracts.js +9 -14
  248. package/dist/contracts/processCaptureExample.js +2 -69
  249. package/dist/contracts/promptContracts.js +49 -67
  250. package/dist/contracts/providerSelection.js +0 -1
  251. package/dist/contracts/reconstructionReadinessExample.js +1 -6
  252. package/dist/contracts/sessionStatusContract.js +1 -17
  253. package/dist/contracts/sessionToolSchemas.js +52 -0
  254. package/dist/contracts/toolContractExamples.js +11 -10
  255. package/dist/contracts/toolContractHelpers.js +19 -0
  256. package/dist/contracts/toolContracts.js +60 -143
  257. package/dist/contracts/toolEffects.js +16 -9
  258. package/dist/contracts/toolOutputSchemaGroups.js +47 -86
  259. package/dist/contracts/toolOutputSchemaPrimitives.js +72 -62
  260. package/dist/contracts/toolSchemaMetadata.js +117 -0
  261. package/dist/contracts/unknownContractExamples.js +0 -2
  262. package/dist/doctorRuntime.js +1 -1
  263. package/dist/domain/analysisErrorPresentation.js +46 -54
  264. package/dist/domain/analysisErrorProjection.js +28 -37
  265. package/dist/domain/analysisProfile.js +3 -31
  266. package/dist/domain/analysisSnapshot.js +3 -12
  267. package/dist/domain/androidApplication.js +15 -52
  268. package/dist/domain/appleApplication.js +24 -65
  269. package/dist/domain/artifactComparison.js +11 -29
  270. package/dist/domain/artifactGraph.js +14 -44
  271. package/dist/domain/artifactInspection.js +38 -69
  272. package/dist/domain/artifactInventoryEvidence.js +27 -21
  273. package/dist/domain/binaryTarget.js +2 -219
  274. package/dist/domain/binaryTargetTypes.js +1 -0
  275. package/dist/domain/browserCaptureComparison.js +35 -60
  276. package/dist/domain/browserObservation.js +45 -197
  277. package/dist/domain/browserObservationSchemas.js +5 -23
  278. package/dist/domain/browserScenario.js +11 -14
  279. package/dist/domain/browserScenarioCapture.js +11 -12
  280. package/dist/domain/browserScenarioCaptureValues.js +146 -84
  281. package/dist/domain/browserScenarioDiff.js +2 -59
  282. package/dist/domain/browserScenarioDiffEvidence.js +51 -0
  283. package/dist/domain/browserScenarioDiffValues.js +21 -38
  284. package/dist/domain/browserScenarioValues.js +80 -109
  285. package/dist/domain/browserSession.js +4 -7
  286. package/dist/domain/bundleComparison.js +6 -32
  287. package/dist/domain/bytecodeProvider.js +53 -54
  288. package/dist/domain/callPath.js +50 -169
  289. package/dist/domain/callPathSchemas.js +79 -0
  290. package/dist/domain/changedBehavior.js +34 -60
  291. package/dist/domain/completionLedgerGeneration.js +8 -14
  292. package/dist/domain/conformancePackage.js +126 -97
  293. package/dist/domain/conformanceReplay.js +39 -11
  294. package/dist/domain/conformanceTrustGate.js +174 -30
  295. package/dist/domain/customProtocolCapture.js +4 -4
  296. package/dist/domain/electronActiveObservation.js +244 -0
  297. package/dist/domain/electronObservation.js +21 -83
  298. package/dist/domain/electronStaticAnalysisBrowser.js +36 -46
  299. package/dist/domain/electronStaticAnalysisIpc.js +38 -14
  300. package/dist/domain/electronStaticAnalysisNative.js +1 -8
  301. package/dist/domain/electronStaticAnalysisValues.js +14 -18
  302. package/dist/domain/errors.js +33 -54
  303. package/dist/domain/eventProcessTree.js +101 -90
  304. package/dist/domain/evidence.js +2 -10
  305. package/dist/domain/evidenceBundle.js +3 -5
  306. package/dist/domain/evidenceCompletionLedger.js +6 -8
  307. package/dist/domain/functionComparison.js +4 -14
  308. package/dist/domain/functionComparisonNormalization.js +8 -8
  309. package/dist/domain/functionComparisonResults.js +25 -15
  310. package/dist/domain/functionComparisonSchemas.js +49 -33
  311. package/dist/domain/functionDossierEvidence.js +31 -151
  312. package/dist/domain/hopperStartupFailure.js +1 -1
  313. package/dist/domain/hopperValues.js +17 -141
  314. package/dist/domain/inputIssueProjection.js +4 -1
  315. package/dist/domain/interfaceBuilderGraph.js +654 -0
  316. package/dist/domain/javascriptApplicationAnalysis.js +8 -112
  317. package/dist/domain/javascriptApplicationChangeGraph.js +22 -82
  318. package/dist/domain/javascriptApplicationEvidenceSchemas.js +59 -47
  319. package/dist/domain/javascriptApplicationGraph.js +3 -13
  320. package/dist/domain/javascriptApplicationGraphSchemas.js +12 -34
  321. package/dist/domain/javascriptApplicationVersionComparison.js +26 -30
  322. package/dist/domain/javascriptApplicationVersionComparisonSchemas.js +123 -68
  323. package/dist/domain/javascriptApplicationVersionItems.js +120 -53
  324. package/dist/domain/javascriptApplicationVersionKeys.js +24 -11
  325. package/dist/domain/javascriptAstFingerprint.js +25 -58
  326. package/dist/domain/javascriptAstValues.js +9 -0
  327. package/dist/domain/javascriptExportInstrumentation.js +2 -4
  328. package/dist/domain/javascriptExportShapeComparison.js +6 -7
  329. package/dist/domain/javascriptExportShapeComparisonSchemas.js +70 -77
  330. package/dist/domain/javascriptExportShapeSelection.js +17 -19
  331. package/dist/domain/javascriptFeatureSeed.js +20 -12
  332. package/dist/domain/javascriptFeatureTrace.js +13 -67
  333. package/dist/domain/javascriptFeatureTraceSchemas.js +24 -52
  334. package/dist/domain/javascriptFeatureTraversal.js +1 -44
  335. package/dist/domain/javascriptNativeHandoff.js +1 -1
  336. package/dist/domain/javascriptReplay.js +100 -101
  337. package/dist/domain/javascriptRuntimeLoadState.js +3 -8
  338. package/dist/domain/javascriptRuntimeObservation.js +43 -103
  339. package/dist/domain/javascriptRuntimeReconciliation.js +1 -3
  340. package/dist/domain/javascriptRuntimeReconciliationActive.js +80 -0
  341. package/dist/domain/javascriptRuntimeReconciliationGraph.js +21 -33
  342. package/dist/domain/javascriptRuntimeReconciliationMatching.js +75 -61
  343. package/dist/domain/javascriptRuntimeReconciliationParsing.js +21 -46
  344. package/dist/domain/javascriptRuntimeReconciliationResult.js +25 -19
  345. package/dist/domain/javascriptRuntimeReconciliationRuntime.js +8 -12
  346. package/dist/domain/javascriptRuntimeReconciliationSchemas.js +34 -49
  347. package/dist/domain/javascriptRuntimeStaticCandidates.js +3 -3
  348. package/dist/domain/javascriptSemanticAnalysis.js +12 -45
  349. package/dist/domain/javascriptSemanticAsyncEffects.js +1 -9
  350. package/dist/domain/javascriptSemanticCallResolution.js +6 -16
  351. package/dist/domain/javascriptSemanticCalls.js +5 -32
  352. package/dist/domain/javascriptSemanticChildProcesses.js +1 -11
  353. package/dist/domain/javascriptSemanticCoverage.js +11 -0
  354. package/dist/domain/javascriptSemanticDataEffectHelpers.js +1 -8
  355. package/dist/domain/javascriptSemanticDataEffects.js +1 -11
  356. package/dist/domain/javascriptSemanticFingerprints.js +3 -5
  357. package/dist/domain/javascriptSemanticGraphSchemas.js +25 -51
  358. package/dist/domain/javascriptSemanticGraphSerialization.js +2 -13
  359. package/dist/domain/javascriptSemanticIr.js +1 -29
  360. package/dist/domain/javascriptSemanticObjects.js +1 -5
  361. package/dist/domain/javascriptSemanticPrimitives.js +2 -9
  362. package/dist/domain/javascriptSemanticProjection.js +0 -18
  363. package/dist/domain/javascriptSemanticPromises.js +9 -16
  364. package/dist/domain/javascriptSemanticProvenance.js +16 -19
  365. package/dist/domain/javascriptSemanticQuery.js +17 -139
  366. package/dist/domain/javascriptSemanticQueryAssessment.js +9 -37
  367. package/dist/domain/javascriptSemanticQueryIdentity.js +2 -23
  368. package/dist/domain/javascriptSemanticQuerySchemas.js +14 -107
  369. package/dist/domain/javascriptSemanticResources.js +1 -6
  370. package/dist/domain/javascriptSemanticReturns.js +10 -27
  371. package/dist/domain/javascriptSemanticValueTypes.js +1 -0
  372. package/dist/domain/javascriptSemanticValues.js +44 -62
  373. package/dist/domain/javascriptStaticAnalysis.js +21 -43
  374. package/dist/domain/javascriptStaticAnalysisBundler.js +34 -93
  375. package/dist/domain/javascriptStaticAnalysisCalls.js +17 -16
  376. package/dist/domain/javascriptStaticAnalysisFindings.js +3 -19
  377. package/dist/domain/javascriptStaticAnalysisHelpers.js +47 -88
  378. package/dist/domain/javascriptStaticAnalysisState.js +1 -5
  379. package/dist/domain/javascriptStaticAnalysisTypes.js +1 -0
  380. package/dist/domain/jsonShape.js +7 -33
  381. package/dist/domain/localPath.js +7 -0
  382. package/dist/domain/managedApplicationGraph.js +9 -41
  383. package/dist/domain/managedApplicationGraphCoverage.js +24 -156
  384. package/dist/domain/managedApplicationGraphNodes.js +10 -13
  385. package/dist/domain/managedArtifact.js +14 -27
  386. package/dist/domain/managedMemberComparison.js +90 -92
  387. package/dist/domain/managedMemberComparisonCoverage.js +11 -33
  388. package/dist/domain/managedMemberComparisonItems.js +221 -0
  389. package/dist/domain/managedMemberComparisonMatch.js +8 -208
  390. package/dist/domain/managedNativeVerification.js +3 -6
  391. package/dist/domain/managedNativeVerificationMatch.js +55 -59
  392. package/dist/domain/managedNativeVerificationSchemas.js +83 -47
  393. package/dist/domain/managedReconstruction.js +19 -23
  394. package/dist/domain/managedRuntimeCorrelation.js +6 -9
  395. package/dist/domain/nativeApiBoundary.js +17 -14
  396. package/dist/domain/nativeInspection.js +0 -2
  397. package/dist/domain/nativeInvestigationGraph.js +351 -0
  398. package/dist/domain/nativeValueFlow.js +61 -0
  399. package/dist/domain/nodeRuntimeCharacterization.js +15 -18
  400. package/dist/domain/objcSwiftMetadata.js +254 -0
  401. package/dist/domain/peInspection.js +1 -1
  402. package/dist/domain/permissionPolicy.js +13 -0
  403. package/dist/domain/processCapture.js +76 -113
  404. package/dist/domain/processCaptureExample.js +68 -0
  405. package/dist/domain/processCaptureParsing.js +21 -0
  406. package/dist/domain/processCaptureReactiveSchema.js +68 -0
  407. package/dist/domain/processCaptureReactiveValidation.js +8 -3
  408. package/dist/domain/processCaptureValidation.js +8 -10
  409. package/dist/domain/processComparison.js +12 -16
  410. package/dist/domain/processObservation.js +5 -6
  411. package/dist/domain/processReactiveMatching.js +32 -46
  412. package/dist/domain/processReactiveRuntime.js +4 -8
  413. package/dist/domain/processReactiveScenario.js +28 -94
  414. package/dist/domain/processReactiveScenarioPreflight.js +5 -30
  415. package/dist/domain/processReactiveTransition.js +42 -21
  416. package/dist/domain/processScenario.js +62 -93
  417. package/dist/domain/processTraceComparison.js +0 -7
  418. package/dist/domain/processTraceEvaluation.js +14 -4
  419. package/dist/domain/processTraceSpecification.js +11 -17
  420. package/dist/domain/protocolCapture.js +11 -9
  421. package/dist/domain/reconstructionCoverage.js +62 -129
  422. package/dist/domain/reconstructionCoverageEvaluation.js +17 -17
  423. package/dist/domain/reconstructionObligationLedgerSchemas.js +45 -72
  424. package/dist/domain/reconstructionReadiness.js +1 -2
  425. package/dist/domain/reconstructionReadinessSchemas.js +66 -40
  426. package/dist/domain/reconstructionUnknowns.js +3 -3
  427. package/dist/domain/reconstructionVerification.js +13 -47
  428. package/dist/domain/reconstructionVerificationSchemas.js +50 -38
  429. package/dist/domain/referenceSourceGraph.js +53 -61
  430. package/dist/domain/referenceSourceImportParsing.js +3 -7
  431. package/dist/domain/replayMachine.js +19 -31
  432. package/dist/domain/replayMachineRun.js +15 -63
  433. package/dist/domain/replayMachineRuntime.js +46 -44
  434. package/dist/domain/replayMachineValues.js +84 -0
  435. package/dist/domain/residualUnknown.js +25 -30
  436. package/dist/domain/runtimeCharacterization.js +15 -16
  437. package/dist/domain/runtimeIdentification.js +48 -47
  438. package/dist/domain/sourceToBundleComparison.js +11 -87
  439. package/dist/domain/sourceToBundleComparisonSchemas.js +25 -50
  440. package/dist/domain/sourceToBundleSignals.js +11 -16
  441. package/dist/domain/staticRuntimeCorrelation.js +44 -54
  442. package/dist/domain/symbolAnalysis.js +10 -19
  443. package/dist/domain/unicodeCodePointOrder.js +12 -0
  444. package/dist/domain/webBundleAnalysis.js +70 -99
  445. package/dist/domain/webBundleAnalyzer.js +2 -4
  446. package/dist/domain/webBundleAnalyzerAst.js +0 -13
  447. package/dist/domain/webBundleAnalyzerInspection.js +26 -52
  448. package/dist/domain/webBundleAnalyzerResult.js +7 -24
  449. package/dist/domain/webCaptureDiff.js +48 -85
  450. package/dist/domain/webCaptureDiffSchemas.js +86 -0
  451. package/dist/domain/webContentArtifact.js +1 -10
  452. package/dist/domain/webMcpDiscovery.js +3 -14
  453. package/dist/domain/webScreenshot.js +58 -34
  454. package/dist/domain/zipPackageFormat.js +7 -0
  455. package/dist/dotnet/ManagedArtifactInspector.js +17 -50
  456. package/dist/dotnet/ManagedMemberInspector.js +27 -58
  457. package/dist/dotnet/ManagedMemberInspectorCore.js +14 -51
  458. package/dist/dotnet/ManagedMemberInstructionDecoder.js +2 -2
  459. package/dist/dotnet/ManagedMemberRows.js +16 -16
  460. package/dist/dotnet/ManagedMetadataHeaps.js +26 -8
  461. package/dist/dotnet/ManagedMetadataInventory.js +21 -30
  462. package/dist/dotnet/ManagedMetadataInventoryRows.js +57 -63
  463. package/dist/dotnet/ManagedMetadataLayout.js +3 -5
  464. package/dist/dotnet/ManagedMethodBodyReader.js +5 -30
  465. package/dist/dotnet/ManagedNativeBoundaryHelpers.js +19 -49
  466. package/dist/dotnet/ManagedNativeBoundaryInspector.js +13 -42
  467. package/dist/dotnet/ManagedPeReader.js +2 -2
  468. package/dist/dotnet/ManagedStaticProvider.js +13 -71
  469. package/dist/generatedMcpToolCatalog.js +1 -1
  470. package/dist/generatedPackageMetadata.js +1 -1
  471. package/dist/ghidra/GhidraAnalysisProfile.js +3 -8
  472. package/dist/ghidra/GhidraClient.js +5 -13
  473. package/dist/ghidra/GhidraClientStartup.js +1 -1
  474. package/dist/ghidra/GhidraClientWire.js +9 -5
  475. package/dist/ghidra/GhidraDefaults.js +0 -18
  476. package/dist/ghidra/GhidraDiagnostics.js +0 -2
  477. package/dist/ghidra/GhidraDoctor.js +16 -12
  478. package/dist/ghidra/GhidraFunctionValues.js +67 -108
  479. package/dist/ghidra/GhidraInstallation.js +98 -42
  480. package/dist/ghidra/GhidraInventoryValues.js +18 -77
  481. package/dist/ghidra/GhidraLauncher.js +0 -8
  482. package/dist/ghidra/GhidraProvider.js +32 -31
  483. package/dist/ghidra/GhidraProviderCapabilities.js +11 -48
  484. package/dist/ghidra/GhidraRequestQueue.js +6 -30
  485. package/dist/ghidra/GhidraResponseBuffer.js +1 -7
  486. package/dist/ghidra/GhidraSessionValues.js +0 -2
  487. package/dist/ghidra/GhidraSocketConnection.js +1 -1
  488. package/dist/ghidra/GhidraTransport.js +4 -7
  489. package/dist/ghidra/protocol.js +19 -42
  490. package/dist/hopper/BridgeLauncher.js +115 -37
  491. package/dist/hopper/HopperAnalysisProfile.js +3 -5
  492. package/dist/hopper/HopperCleanup.js +11 -9
  493. package/dist/hopper/HopperClient.js +5 -8
  494. package/dist/hopper/HopperProcessDiagnostic.js +2 -2
  495. package/dist/hopper/HopperProvider.js +0 -30
  496. package/dist/hopper/HopperRequestQueue.js +21 -40
  497. package/dist/hopper/HopperResponseStream.js +1 -9
  498. package/dist/hopper/HopperSessionValues.js +3 -2
  499. package/dist/hopper/HopperTargetLease.js +119 -0
  500. package/dist/hopper/LinuxPrivateDisplayDiagnostic.js +24 -31
  501. package/dist/hopper/LinuxPrivateDisplayProbe.js +21 -26
  502. package/dist/hopper/protocol.js +6 -4
  503. package/dist/main/reload.js +1 -9
  504. package/dist/main/shutdown.js +1 -1
  505. package/dist/main/state.js +0 -23
  506. package/dist/main/transport.js +27 -39
  507. package/dist/main.js +17 -15
  508. package/dist/mcpDoctor.js +27 -69
  509. package/dist/native/CommandRunner.js +18 -25
  510. package/dist/native/NativeMacOSProvider.js +13 -38
  511. package/dist/native/NativeMachoInspection.js +1 -1
  512. package/dist/process/BoundedFileBytes.js +17 -0
  513. package/dist/process/ExecFileOutput.js +11 -0
  514. package/dist/process/PendingOperations.js +8 -6
  515. package/dist/process/PrivateRuntimeRoot.js +17 -0
  516. package/dist/process/ProcessOwnership.js +67 -130
  517. package/dist/process/ProcessOwnershipIdentity.js +13 -0
  518. package/dist/process/ProcessOwnershipObservation.js +87 -0
  519. package/dist/process/ProcessOwnershipProcessTree.js +22 -0
  520. package/dist/process/ProviderDeadline.js +8 -12
  521. package/dist/process/ProviderProcess.js +7 -28
  522. package/dist/process/WindowsAuthority.js +32 -0
  523. package/dist/reference/ReferenceSourceReader.js +8 -24
  524. package/dist/reference/ReferenceSourceReaderEntries.js +11 -39
  525. package/dist/reference/ReferenceSourceReaderFile.js +13 -31
  526. package/dist/reference/ReferenceSourceReaderPaths.js +3 -18
  527. package/dist/reference/ReferenceSourceReaderValidate.js +3 -6
  528. package/dist/replay/JavaScriptReplayWorker.js +95 -13
  529. package/dist/replay/JavaScriptReplayWorkerTypes.js +1 -0
  530. package/dist/replay/LinuxJavaScriptReplayRunner.js +42 -43
  531. package/dist/replay/LinuxJavaScriptReplaySandbox.js +0 -19
  532. package/dist/replay/LinuxRuntimeClosure.js +1 -3
  533. package/dist/replay/ReplayOutcome.js +27 -18
  534. package/dist/replay/ReplayProcessLifecycle.js +32 -7
  535. package/dist/replay/ReplaySeccompFile.js +29 -0
  536. package/dist/replay/ReplayWorkerProtocol.js +33 -30
  537. package/dist/replay/SystemJavaScriptReplayHost.js +45 -74
  538. package/dist/server/ProcessCaptureElicitation.js +4 -8
  539. package/dist/server/createServer.js +145 -119
  540. package/dist/server/mcpClientMetadata.js +32 -0
  541. package/dist/server/promptCompletion.js +37 -61
  542. package/dist/server/recordDerivedEvidence.js +1 -1
  543. package/dist/server/registerApplicationTools/characterization.js +10 -21
  544. package/dist/server/registerApplicationTools/compareExportShapes.js +6 -16
  545. package/dist/server/registerApplicationTools/compareSourceToBundle.js +6 -15
  546. package/dist/server/registerApplicationTools/compareVersions.js +6 -16
  547. package/dist/server/registerApplicationTools/controlledReplay.js +8 -15
  548. package/dist/server/registerApplicationTools/coverage.js +7 -78
  549. package/dist/server/registerApplicationTools/helpers.js +1 -13
  550. package/dist/server/registerApplicationTools/obligationLedger.js +4 -8
  551. package/dist/server/registerApplicationTools/traceFeature.js +6 -15
  552. package/dist/server/registerApplicationTools/traceSemantics.js +5 -13
  553. package/dist/server/registerApplicationTools.js +0 -2
  554. package/dist/server/registerArtifactComparisonTool.js +27 -35
  555. package/dist/server/registerBrowserScenarioTool.js +3 -8
  556. package/dist/server/registerBrowserTools.js +36 -81
  557. package/dist/server/registerBundleComparisonTool.js +10 -16
  558. package/dist/server/registerCloseLifecycleTool.js +5 -27
  559. package/dist/server/registerElectronTools.js +29 -65
  560. package/dist/server/registerEnhancedTools.js +118 -127
  561. package/dist/server/registerEvidenceTools.js +19 -30
  562. package/dist/server/registerFunctionComparisonTool.js +35 -34
  563. package/dist/server/registerInvestigationTools/helpers.js +3 -32
  564. package/dist/server/registerInvestigationTools.js +36 -148
  565. package/dist/server/registerJavaScriptRuntimeObservationTools.js +15 -27
  566. package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +16 -23
  567. package/dist/server/registerManagedWorkflowTools/contract.js +2 -3
  568. package/dist/server/registerManagedWorkflowTools/evidence.js +19 -35
  569. package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +4 -14
  570. package/dist/server/registerManagedWorkflowTools/planManagedRuntimeCorrelation.js +4 -14
  571. package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +11 -20
  572. package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +10 -21
  573. package/dist/server/registerOfficialTools.js +8 -51
  574. package/dist/server/registerProcessComparisonTool.js +43 -38
  575. package/dist/server/registerPrompts.js +19 -17
  576. package/dist/server/registerReplayMachineTool.js +4 -10
  577. package/dist/server/registerSessionRecordTools.js +36 -153
  578. package/dist/server/registerSessionStatusTool.js +18 -96
  579. package/dist/server/registerSessionTools.js +34 -91
  580. package/dist/server/sessionAvailabilityPolicy.js +2 -3
  581. package/dist/server/sessionEvidence.js +9 -15
  582. package/dist/server/sessionToolPolicies.js +1 -13
  583. package/dist/server/toolRegistrationOptions.js +4 -192
  584. package/dist/server/toolResult.js +15 -67
  585. package/dist/serverIdentity.js +0 -20
  586. package/install.sh +1 -1
  587. package/package.json +27 -15
  588. package/scripts/electron-active-hook-boundaries.cjs +394 -0
  589. package/scripts/electron-active-hook.cjs +469 -0
  590. package/scripts/hopper-demo-x11.py +13 -32
  591. package/scripts/rea.mjs +1 -11
  592. package/skills/reverse-engineer-anything/SKILL.md +46 -11
  593. package/skills/reverse-engineer-anything/references/evidence-workflows.md +6 -4
  594. package/skills/reverse-engineer-anything/references/javascript-applications.md +13 -13
  595. package/skills/reverse-engineer-anything/references/native-and-artifacts.md +12 -8
  596. package/dist/application/ApplicationWorkflowEvidenceResolver.js +0 -180
  597. package/dist/application/BoundedJsonFiles.js +0 -86
  598. package/dist/application/CrossVersionInventory.js +0 -128
  599. package/dist/application/CrossVersionInvestigation.js +0 -301
  600. package/dist/application/CrossVersionInvestigationCollections.js +0 -23
  601. package/dist/application/CrossVersionInvestigationEvidence.js +0 -64
  602. package/dist/application/CrossVersionInvestigationReplay.js +0 -170
  603. package/dist/application/DeferredFileAuthorization.js +0 -61
  604. package/dist/application/DoctorProjection.js +0 -43
  605. package/dist/application/EnhancedToolPagination.js +0 -22
  606. package/dist/application/EvidenceReferenceResolver.js +0 -26
  607. package/dist/application/InvestigationWorkspaceStore.js +0 -204
  608. package/dist/application/ProcessPairedExperiment.js +0 -72
  609. package/dist/application/ReconstructionCoverageWorkspaceStore.js +0 -31
  610. package/dist/application/ReconstructionReadinessService.js +0 -48
  611. package/dist/cliInvestigationCommands.js +0 -173
  612. package/dist/domain/boundedCartesianProjection.js +0 -15
  613. package/dist/domain/investigationWorkspace.js +0 -346
  614. package/dist/domain/jsonLimits.js +0 -26
  615. package/dist/domain/knownPageCoverage.js +0 -21
  616. package/dist/domain/processPairedExperiment.js +0 -128
  617. package/dist/server/DynamicToolAvailability.js +0 -70
  618. package/dist/server/LazyToolCatalog.js +0 -134
  619. package/dist/server/hydrateServerTools.js +0 -191
  620. package/dist/server/javascriptApplicationResult.js +0 -106
  621. package/dist/server/permissionFailure.js +0 -12
  622. package/dist/server/registerApplicationTools/readiness.js +0 -55
  623. package/dist/server/registerEvidenceResources.js +0 -315
  624. package/dist/server/registerJavaScriptApplicationGraphResource.js +0 -65
  625. package/dist/server/registerReconstructionObligationLedgerResource.js +0 -32
  626. package/dist/server/registerReconstructionReadinessResource.js +0 -32
  627. package/dist/server/toolInputValidation.js +0 -77
  628. package/scripts/package-runner-bootstrap.mjs +0 -72
@@ -0,0 +1,80 @@
1
+ import { createHash } from "node:crypto";
2
+ import { isAbsolute } from "node:path";
3
+ import { isPathWithinRoot } from "./localPath.js";
4
+ import canonicalize from "canonicalize";
5
+ import { z } from "zod";
6
+ import { classifyBrowserCompleteness, } from "./browserCompleteness.js";
7
+ import { electronActiveObservationResultSchema, } from "./electronActiveObservation.js";
8
+ /** Parse active Electron Evidence as a bounded, target-only runtime capture. */
9
+ export const parseActiveElectronCapture = (evidence) => {
10
+ assertIdentity(evidence);
11
+ const result = electronActiveObservationResultSchema.parse(evidence.normalized_result);
12
+ const parameters = z
13
+ .object({
14
+ application_path: absolutePathSchema,
15
+ application_root: absolutePathSchema,
16
+ })
17
+ .passthrough()
18
+ .parse(evidence.parameters);
19
+ if (result.application.application_path !== parameters.application_path ||
20
+ !isPathWithinRoot(parameters.application_root, result.application.application_path))
21
+ throw new TypeError("Active Electron Evidence application path disagrees with its configured root");
22
+ return {
23
+ kind: "electron-active",
24
+ evidence,
25
+ inspection: normalizeInspection(result),
26
+ captureSha256: digestCanonical(result),
27
+ scriptsCompleteWithinScope: false,
28
+ };
29
+ };
30
+ const absolutePathSchema = z.string().min(1).refine(isAbsolute);
31
+ const assertIdentity = (evidence) => {
32
+ if (evidence.operation !== "capture_electron_scenario" ||
33
+ evidence.predicate_type !== "rea.electron-active-scenario" ||
34
+ evidence.provider.id !== "rea-playwright-electron-active" ||
35
+ evidence.provider.name !==
36
+ "REA Playwright active Electron observation provider" ||
37
+ evidence.provider.version !== "1" ||
38
+ evidence.authority !== "controlled-replay" ||
39
+ evidence.confidence !== "observed")
40
+ throw new TypeError("Evidence does not match the supported capture_electron_scenario contract");
41
+ };
42
+ const normalizeInspection = (result) => ({
43
+ target: {
44
+ target_id: `electron-active:${digestCanonical(result.application.application_path).slice(0, 32)}`,
45
+ type: "electron-application",
46
+ title: result.application.application_path,
47
+ attached: true,
48
+ file_path: result.application.application_path,
49
+ },
50
+ frames: [],
51
+ scripts: { items: [] },
52
+ workers: [],
53
+ completeness: classifyBrowserCompleteness({
54
+ policyFilteredSections: new Set(),
55
+ attachLimitedSections: new Set(),
56
+ truncatedSections: new Set(),
57
+ unavailableSections: new Set([
58
+ "frames",
59
+ "scripts",
60
+ "script_sources",
61
+ "workers",
62
+ ]),
63
+ excluded: [],
64
+ droppedEvents: {
65
+ scripts: 0,
66
+ network_requests: 0,
67
+ console_events: 0,
68
+ websocket_connections: 0,
69
+ websocket_frames: 0,
70
+ webmcp_tools: 0,
71
+ timeline_events: 0,
72
+ },
73
+ }),
74
+ });
75
+ const digestCanonical = (value) => {
76
+ const encoded = canonicalize(value);
77
+ if (encoded === undefined)
78
+ throw new TypeError("Runtime reconciliation could not canonicalize input");
79
+ return createHash("sha256").update(encoded).digest("hex");
80
+ };
@@ -10,11 +10,10 @@ export const buildReconciledApplicationGraph = (input) => {
10
10
  ...input.runtime.edges,
11
11
  ...input.reconciliationEdges,
12
12
  ]);
13
- const bounded = boundGraphContent(input, merged.nodes, allEdges);
14
- const facts = graphCoverageFacts(input, merged.omittedObservations + bounded.omittedItems);
13
+ const bounded = boundGraphContent(input, merged, allEdges);
14
+ const facts = graphCoverageFacts(input, bounded.omittedItems);
15
15
  const graph = createJavaScriptApplicationGraph({
16
16
  schema: "JavaScriptApplicationGraph",
17
- schema_version: 1,
18
17
  root_node_ids: bounded.rootNodeIds,
19
18
  nodes: bounded.nodes,
20
19
  edges: bounded.edges,
@@ -24,45 +23,37 @@ export const buildReconciledApplicationGraph = (input) => {
24
23
  "Runtime presence is bounded to passive capture windows and does not prove feature execution.",
25
24
  "Cross-layer observed_as edges are inferences; digest equality proves byte identity only.",
26
25
  "Source-map relationships retain their original static authority and are not promoted into runtime matches.",
27
- ...(facts.inputTruncated
26
+ ...(facts.inputStatus === "truncated"
28
27
  ? [
29
28
  "One or more source graphs or passive captures were incomplete or truncated.",
30
29
  ]
31
30
  : []),
32
31
  ...(facts.outputTruncated
33
32
  ? [
34
- "The reconciled graph omitted entities or classifications at caller limits.",
33
+ "The reconciled graph omitted entities or classifications during projection.",
35
34
  ]
36
35
  : []),
37
36
  ]),
38
37
  });
39
38
  return {
40
39
  graph,
41
- omittedGraphItems: merged.omittedObservations + bounded.omittedItems,
40
+ omittedGraphItems: bounded.omittedItems,
42
41
  };
43
42
  };
44
43
  const boundGraphContent = (input, nodes, edges) => {
45
44
  const allRoots = preferredRootIds(input);
46
- const rootNodeIds = allRoots.slice(0, 1_000);
47
- const roots = new Set(rootNodeIds);
45
+ const rootNodeIds = allRoots;
48
46
  const sortedNodes = [...nodes].sort((left, right) => compareCodePoints(left.node_id, right.node_id));
49
- const retainedNodes = [
50
- ...sortedNodes.filter(({ node_id: id }) => roots.has(id)),
51
- ...sortedNodes.filter(({ node_id: id }) => !roots.has(id)),
52
- ].slice(0, 100_000);
47
+ const retainedNodes = sortedNodes;
53
48
  const retainedIds = new Set(retainedNodes.map(({ node_id: id }) => id));
54
49
  const retainedEdges = [...edges]
55
50
  .sort((left, right) => compareCodePoints(left.edge_id, right.edge_id))
56
- .filter(({ source_node_id: source, target_node_id: target }) => retainedIds.has(source) && retainedIds.has(target))
57
- .slice(0, 200_000);
51
+ .filter(({ source_node_id: source, target_node_id: target }) => retainedIds.has(source) && retainedIds.has(target));
58
52
  return {
59
53
  rootNodeIds,
60
54
  nodes: retainedNodes,
61
55
  edges: retainedEdges,
62
- omittedItems: allRoots.length -
63
- rootNodeIds.length +
64
- (nodes.length - retainedNodes.length) +
65
- (edges.length - retainedEdges.length),
56
+ omittedItems: 0,
66
57
  };
67
58
  };
68
59
  const preferredRootIds = (input) => {
@@ -83,6 +74,8 @@ const graphCoverageFacts = (input, omittedNodeObservations) => {
83
74
  const captureHasUnknownOmissions = input.captures.some(({ inspection }) => inspection.completeness.unavailable_sections.length > 0);
84
75
  const inputTruncated = input.layers.some(({ graph }) => graph.coverage.truncated) ||
85
76
  captureTruncated;
77
+ const inputComplete = input.layers.every(({ graph }) => graph.coverage.status === "complete") &&
78
+ input.captures.every(({ inspection }) => inspection.completeness.status === "complete_within_window");
86
79
  const outputTruncated = projectionOmissions > 0;
87
80
  const sourceOmissions = input.layers.reduce((total, { graph }) => total + (graph.coverage.omitted_count ?? 0), 0);
88
81
  const omissionsKnown = !captureTruncated &&
@@ -92,24 +85,23 @@ const graphCoverageFacts = (input, omittedNodeObservations) => {
92
85
  projectionOmissions,
93
86
  knownOmissions: projectionOmissions + sourceOmissions,
94
87
  omissionsKnown,
95
- inputTruncated,
88
+ inputStatus: inputTruncated
89
+ ? "truncated"
90
+ : inputComplete
91
+ ? "complete"
92
+ : "partial",
96
93
  outputTruncated,
97
- truncated: inputTruncated || outputTruncated,
98
- complete: !inputTruncated &&
99
- !outputTruncated &&
100
- input.layers.every(({ graph }) => graph.coverage.status === "complete") &&
101
- input.captures.every(({ inspection }) => inspection.completeness.status === "complete_within_window"),
102
94
  };
103
95
  };
104
- const graphCoverage = (input, facts, nodeCount) => facts.complete
96
+ const graphCoverage = (input, facts, nodeCount) => facts.inputStatus === "complete" && !facts.outputTruncated
105
97
  ? { status: "complete", truncated: false, omitted_count: 0, limits: [] }
106
- : facts.truncated
98
+ : facts.inputStatus === "truncated" || facts.outputTruncated
107
99
  ? {
108
100
  status: "partial",
109
101
  truncated: true,
110
102
  omitted_count: facts.omissionsKnown ? facts.knownOmissions : null,
111
103
  limits: [
112
- ...(facts.inputTruncated
104
+ ...(facts.inputStatus === "truncated"
113
105
  ? [
114
106
  {
115
107
  name: "runtime-reconciliation-input-coverage",
@@ -139,7 +131,6 @@ const mergeNodes = (nodes) => {
139
131
  const grouped = new Map();
140
132
  for (const node of nodes)
141
133
  grouped.set(node.node_id, [...(grouped.get(node.node_id) ?? []), node]);
142
- let omittedObservations = 0;
143
134
  const merged = [...grouped.values()].map((group) => {
144
135
  const first = group[0];
145
136
  if (first === undefined)
@@ -152,16 +143,13 @@ const mergeNodes = (nodes) => {
152
143
  .flatMap(({ observations: values }) => values)
153
144
  .map((observation) => [observation.observation_id, observation])).values(),
154
145
  ].sort((left, right) => compareCodePoints(left.observation_id, right.observation_id));
155
- omittedObservations += Math.max(0, observations.length - 64);
156
146
  return createJavaScriptApplicationNode({
157
147
  kind: first.kind,
158
148
  identity: first.identity,
159
- observations: observations
160
- .slice(0, 64)
161
- .map(({ observation_id: _id, identifier_strategy: _strategy, ...value }) => value),
149
+ observations: observations.map(({ observation_id: _id, identifier_strategy: _strategy, ...value }) => value),
162
150
  });
163
151
  });
164
- return { nodes: merged, omittedObservations };
152
+ return merged;
165
153
  };
166
154
  const uniqueEdges = (edges) => [
167
155
  ...new Map(edges.map((edge) => [edge.edge_id, edge])).values(),
@@ -5,13 +5,11 @@ import { mappedRuntimePaths, } from "./javascriptRuntimeStaticCandidates.js";
5
5
  export const reconcileRuntimeEntities = (input) => {
6
6
  const index = indexCandidates(input.candidates);
7
7
  const evaluated = input.entities.map((entity) => reconcileEntity(entity, index, input.layers));
8
- const retained = evaluated
9
- .sort((left, right) => compareCodePoints(left.item.reconciliation_id, right.item.reconciliation_id))
10
- .slice(0, input.maximumItems);
8
+ const retained = evaluated.sort((left, right) => compareCodePoints(left.item.reconciliation_id, right.item.reconciliation_id));
11
9
  return {
12
10
  items: retained.map(({ item }) => item),
13
11
  edges: retained.flatMap(({ edge }) => (edge === null ? [] : [edge])),
14
- omittedItems: evaluated.length - retained.length,
12
+ omittedItems: 0,
15
13
  };
16
14
  };
17
15
  const reconcileEntity = (entity, index, layers) => {
@@ -20,14 +18,16 @@ const reconcileEntity = (entity, index, layers) => {
20
18
  const content = index.byCategoryDigest.get(categoryDigestKey(entity.staticKind, entity.sourceSha256)) ?? [];
21
19
  const locatedKeys = new Set(locations.map(({ candidate }) => candidateKey(candidate)));
22
20
  const combined = content.filter((candidate) => locatedKeys.has(candidateKey(candidate)));
23
- if (combined.length === 1)
24
- return matched(entity, combined[0], {
21
+ const combinedCandidate = combined.at(0);
22
+ if (combined.length === 1 && combinedCandidate !== undefined)
23
+ return matched(entity, combinedCandidate, {
25
24
  basis: "content-and-location",
26
25
  confidence: "high",
27
26
  reason: "content-and-location-match",
28
27
  });
29
- if (content.length === 1) {
30
- const candidate = content[0];
28
+ const contentCandidate = content.at(0);
29
+ if (content.length === 1 && contentCandidate !== undefined) {
30
+ const candidate = contentCandidate;
31
31
  const digestBasis = candidate.digests.find(({ sha256 }) => sha256 === entity.sourceSha256)?.basis;
32
32
  return matched(entity, candidate, {
33
33
  basis: digestBasis ?? "content-sha256",
@@ -59,8 +59,9 @@ const reconcileEntity = (entity, index, layers) => {
59
59
  candidates: [],
60
60
  });
61
61
  }
62
- if (locations.length === 1) {
63
- const located = locations[0];
62
+ const location = locations.at(0);
63
+ if (locations.length === 1 && location !== undefined) {
64
+ const located = location;
64
65
  return matched(entity, located.candidate, {
65
66
  basis: located.mapping.basis,
66
67
  confidence: "medium",
@@ -156,13 +157,22 @@ const unresolved = (entity, input) => ({
156
157
  });
157
158
  const createItem = (entity, input) => {
158
159
  const candidateReferences = uniqueCandidateReferences(input.candidates);
160
+ const staticMatch = input.status === "matched"
161
+ ? {
162
+ static_layer_id: input.layer.layerId,
163
+ static_node_id: input.staticNodeId,
164
+ status: input.status,
165
+ }
166
+ : {
167
+ static_layer_id: null,
168
+ static_node_id: null,
169
+ status: input.status,
170
+ };
159
171
  const semantic = {
160
172
  entity_kind: entity.kind,
161
173
  runtime_evidence_id: entity.capture.evidence.evidence_id,
162
174
  runtime_node_id: entity.node.node_id,
163
- static_layer_id: input.layer?.layerId ?? null,
164
- static_node_id: input.staticNodeId,
165
- status: input.status,
175
+ ...staticMatch,
166
176
  basis: input.basis,
167
177
  confidence: input.confidence,
168
178
  reason: input.reason,
@@ -174,50 +184,55 @@ const createItem = (entity, input) => {
174
184
  ...semantic,
175
185
  };
176
186
  };
177
- const reconciliationEvidence = (entity, layer, basis, confidence) => ({
178
- authority: "cross-layer-reconciliation",
179
- state: "inferred",
180
- confidence: confidence === "medium" ? "medium" : "high",
181
- artifact: entity.sourceSha256 === null
182
- ? {
183
- available: false,
184
- reason: "not-observed",
185
- detail: "Runtime source bytes were not captured for this mapping.",
186
- }
187
- : {
188
- available: true,
189
- artifact_id: `art_${entity.sourceSha256}`,
190
- sha256: entity.sourceSha256,
191
- },
192
- location: entity.node.observations[0].evidence.location,
193
- extractor: {
194
- name: "rea-javascript-runtime-reconciliation",
195
- version: "1",
196
- operation: "reconcile_javascript_runtime",
197
- executable_sha256: null,
198
- },
199
- coverage: layer.graph.coverage.status === "complete" &&
200
- entity.capture.scriptsCompleteWithinScope
201
- ? { status: "complete", truncated: false, omitted_count: 0, limits: [] }
202
- : {
203
- status: "partial",
204
- truncated: false,
205
- omitted_count: null,
206
- limits: [],
187
+ const reconciliationEvidence = (entity, layer, basis, confidence) => {
188
+ const observation = entity.node.observations.at(0);
189
+ if (observation === undefined)
190
+ throw new TypeError("Runtime reconciliation entity has no observation");
191
+ return {
192
+ authority: "cross-layer-reconciliation",
193
+ state: "inferred",
194
+ confidence: confidence === "medium" ? "medium" : "high",
195
+ artifact: entity.sourceSha256 === null
196
+ ? {
197
+ available: false,
198
+ reason: "not-observed",
199
+ detail: "Runtime source bytes were not captured for this mapping.",
200
+ }
201
+ : {
202
+ available: true,
203
+ artifact_id: `art_${entity.sourceSha256}`,
204
+ sha256: entity.sourceSha256,
205
+ },
206
+ location: observation.evidence.location,
207
+ extractor: {
208
+ name: "rea-javascript-runtime-reconciliation",
209
+ version: "1",
210
+ operation: "reconcile_javascript_runtime",
211
+ executable_sha256: null,
207
212
  },
208
- limitations: [
209
- basis === "content-sha256" ||
210
- basis === "module-source-sha256" ||
211
- basis === "content-and-location"
212
- ? "Equal content digests establish byte identity, not execution causality."
213
- : "Location correspondence is inferred from an artifact root or caller-declared mapping.",
214
- "Passive script parsing or target presence does not prove feature execution.",
215
- ],
216
- evidence_ids: [
217
- layer.evidence.evidence_id,
218
- entity.capture.evidence.evidence_id,
219
- ].sort(),
220
- });
213
+ coverage: layer.graph.coverage.status === "complete" &&
214
+ entity.capture.scriptsCompleteWithinScope
215
+ ? { status: "complete", truncated: false, omitted_count: 0, limits: [] }
216
+ : {
217
+ status: "partial",
218
+ truncated: false,
219
+ omitted_count: null,
220
+ limits: [],
221
+ },
222
+ limitations: [
223
+ basis === "content-sha256" ||
224
+ basis === "module-source-sha256" ||
225
+ basis === "content-and-location"
226
+ ? "Equal content digests establish byte identity, not execution causality."
227
+ : "Location correspondence is inferred from an artifact root or caller-declared mapping.",
228
+ "Passive script parsing or target presence does not prove feature execution.",
229
+ ],
230
+ evidence_ids: [
231
+ layer.evidence.evidence_id,
232
+ entity.capture.evidence.evidence_id,
233
+ ].sort(),
234
+ };
235
+ };
221
236
  const strongestLocationBasis = (values) => {
222
237
  const bases = new Set(values.map(({ mapping }) => mapping.basis));
223
238
  if (bases.has("artifact-path"))
@@ -237,11 +252,10 @@ const uniqueCandidateReferences = (candidates) => {
237
252
  continue;
238
253
  seen.add(key);
239
254
  count += 1;
240
- if (items.length < 1_000)
241
- items.push({
242
- static_layer_id: layer.layerId,
243
- static_node_id: node.node_id,
244
- });
255
+ items.push({
256
+ static_layer_id: layer.layerId,
257
+ static_node_id: node.node_id,
258
+ });
245
259
  }
246
260
  return { count, items };
247
261
  };
@@ -1,14 +1,14 @@
1
1
  import { createHash } from "node:crypto";
2
- import { isAbsolute, relative } from "node:path";
3
2
  import canonicalize from "canonicalize";
4
3
  import { z } from "zod";
5
- import { browserAllowedOriginsSchema, browserEndpointSchema, browserOriginSchema, webPageInspectionSchema, } from "./browserObservation.js";
4
+ import { browserAllowedOriginsSchema, browserEndpointSchema, webPageInspectionSchema, } from "./browserObservation.js";
6
5
  import { classifyBrowserCompleteness, } from "./browserCompleteness.js";
7
- import { electronFileRootsSchema, electronPageInspectionSchema, } from "./electronObservation.js";
6
+ import { electronPageInspectionSchema, } from "./electronObservation.js";
8
7
  import { javascriptRuntimeObservationSchema, javascriptRuntimeKindSchema, } from "./javascriptRuntimeObservation.js";
9
8
  import { parseEvidence } from "./evidence.js";
10
9
  import { javascriptApplicationAnalysisResultSchema, } from "./javascriptApplicationAnalysis.js";
11
10
  import { compareCodePoints, } from "./javascriptApplicationGraph.js";
11
+ import { parseActiveElectronCapture } from "./javascriptRuntimeReconciliationActive.js";
12
12
  /** Parse and semantically bind every static analysis Evidence layer. */
13
13
  export const parseStaticLayers = (layers) => layers
14
14
  .map((layer) => parseStaticLayer(layer))
@@ -28,7 +28,7 @@ const parseStaticLayer = (layer) => {
28
28
  const result = javascriptApplicationAnalysisResultSchema.parse(evidence.normalized_result);
29
29
  assertEvidenceIdentity(evidence, {
30
30
  operation: "analyze_javascript_application",
31
- predicate: `rea.javascript-application-analysis/v${String(result.schema_version)}`,
31
+ predicate: "rea.javascript-application-analysis",
32
32
  providerId: "rea-javascript-application",
33
33
  providerName: "REA JavaScript application analyzer",
34
34
  providerVersion: "1",
@@ -40,13 +40,6 @@ const parseStaticLayer = (layer) => {
40
40
  evidence.subject.format !== result.format ||
41
41
  evidence.subject.local_path !== result.input_path)
42
42
  throw new TypeError("JavaScript application Evidence subject disagrees with its result");
43
- const parameters = z
44
- .object({
45
- approved: z.literal(true),
46
- source_map_read_approved: z.boolean(),
47
- })
48
- .passthrough()
49
- .parse(evidence.parameters);
50
43
  return {
51
44
  layerId: `jrl_${digestCanonical({
52
45
  role: layer.role,
@@ -58,7 +51,6 @@ const parseStaticLayer = (layer) => {
58
51
  result,
59
52
  graph: result.graph,
60
53
  runtimeMappings: layer.runtime_mappings,
61
- sourceMapReadApproved: parameters.source_map_read_approved,
62
54
  };
63
55
  };
64
56
  const parseRuntimeCapture = (input) => {
@@ -66,7 +58,7 @@ const parseRuntimeCapture = (input) => {
66
58
  if (evidence.operation === "inspect_web_page") {
67
59
  assertEvidenceIdentity(evidence, {
68
60
  operation: "inspect_web_page",
69
- predicate: "rea.web-page-inspection/v2",
61
+ predicate: "rea.web-page-inspection",
70
62
  providerId: "rea-cdp-browser",
71
63
  providerName: "REA Chrome DevTools Protocol observation provider",
72
64
  providerVersion: "2",
@@ -91,7 +83,7 @@ const parseRuntimeCapture = (input) => {
91
83
  if (evidence.operation === "inspect_electron_page") {
92
84
  assertEvidenceIdentity(evidence, {
93
85
  operation: "inspect_electron_page",
94
- predicate: "rea.electron-page-inspection/v1",
86
+ predicate: "rea.electron-page-inspection",
95
87
  providerId: "rea-cdp-electron",
96
88
  providerName: "REA Electron file-page CDP observation provider",
97
89
  providerVersion: "1",
@@ -115,7 +107,7 @@ const parseRuntimeCapture = (input) => {
115
107
  if (evidence.operation === "observe_javascript_runtime") {
116
108
  assertEvidenceIdentity(evidence, {
117
109
  operation: "observe_javascript_runtime",
118
- predicate: "rea.javascript-runtime-observation/v1",
110
+ predicate: "rea.javascript-runtime-observation",
119
111
  providerId: "rea-v8-inspector",
120
112
  providerName: "REA passive Node/Electron V8 Inspector provider",
121
113
  providerVersion: "1",
@@ -133,38 +125,30 @@ const parseRuntimeCapture = (input) => {
133
125
  scriptsCompleteWithinScope: false,
134
126
  };
135
127
  }
136
- throw new TypeError("Runtime reconciliation requires inspect_web_page, inspect_electron_page, or observe_javascript_runtime Evidence");
128
+ if (evidence.operation === "capture_electron_scenario") {
129
+ return parseActiveElectronCapture(evidence);
130
+ }
131
+ throw new TypeError("Runtime reconciliation requires inspect_web_page, inspect_electron_page, observe_javascript_runtime, or capture_electron_scenario Evidence");
137
132
  };
138
133
  const assertV8RuntimeParameters = (evidence, result) => {
139
134
  const parameters = z
140
135
  .object({
141
136
  inspector_endpoint: browserEndpointSchema,
142
- allowed_file_roots: z
143
- .array(z.string().min(1).max(16_384).refine(isAbsolute))
144
- .max(32),
145
- allowed_origins: z.array(browserOriginSchema).max(32),
146
- target_id: z.string().trim().min(1).max(256),
147
- runtime_kind: javascriptRuntimeKindSchema,
137
+ target_id: z.string().trim().min(1),
138
+ runtime_kind: javascriptRuntimeKindSchema.optional(),
148
139
  })
149
140
  .passthrough()
150
141
  .parse(evidence.parameters);
151
142
  if (parameters.target_id !== result.target.target_id ||
152
- parameters.runtime_kind !== result.target.runtime_kind)
143
+ (parameters.runtime_kind !== undefined &&
144
+ parameters.runtime_kind !== result.target.runtime_kind))
153
145
  throw new TypeError("Runtime Evidence target or declared role disagrees with its result");
154
146
  for (const location of [
155
147
  result.target.location,
156
148
  ...result.scripts.items.map(({ location }) => location),
157
149
  ])
158
- if ((location.kind === "file" &&
159
- !parameters.allowed_file_roots.some((root) => isWithinRoot(root, location.file_path))) ||
160
- (location.kind === "url" &&
161
- !parameters.allowed_origins.includes(location.origin)) ||
162
- (location.kind === "builtin" && !location.specifier.startsWith("node:")))
163
- throw new TypeError("Runtime Evidence contains a location outside its recorded scope");
164
- };
165
- const isWithinRoot = (root, path) => {
166
- const remainder = relative(root, path);
167
- return (remainder === "" || (!remainder.startsWith("..") && !isAbsolute(remainder)));
150
+ if (location.kind === "builtin" && !location.specifier.startsWith("node:"))
151
+ throw new TypeError("Runtime Evidence contains an invalid builtin location");
168
152
  };
169
153
  const normalizeV8Inspection = (result) => ({
170
154
  target: {
@@ -231,7 +215,7 @@ const runtimeLocation = (location) => {
231
215
  const excludedV8Scripts = (result) => Object.values(result.scripts.excluded).reduce((total, count) => total + count, 0);
232
216
  const assertRuntimeParameters = (evidence, expected) => {
233
217
  const common = {
234
- target_id: z.string().trim().min(1).max(256),
218
+ target_id: z.string().trim().min(1),
235
219
  cdp_endpoint: browserEndpointSchema,
236
220
  include_script_sources: z.boolean(),
237
221
  };
@@ -248,20 +232,11 @@ const assertRuntimeParameters = (evidence, expected) => {
248
232
  throw new TypeError("Runtime Evidence contains source without source-capture approval");
249
233
  return;
250
234
  }
251
- const parameters = z
252
- .object({
253
- ...common,
254
- allowed_file_roots: electronFileRootsSchema,
255
- source_capture_approved: z.boolean(),
256
- })
257
- .passthrough()
258
- .parse(evidence.parameters);
235
+ const parameters = z.object(common).passthrough().parse(evidence.parameters);
259
236
  if (parameters.target_id !== expected.targetId)
260
237
  throw new TypeError("Runtime Evidence target disagrees with its captured result");
261
- if (expected.sourceIncluded &&
262
- (!parameters.include_script_sources ||
263
- parameters.source_capture_approved !== true))
264
- throw new TypeError("Runtime Evidence contains source without source-capture approval");
238
+ if (expected.sourceIncluded && !parameters.include_script_sources)
239
+ throw new TypeError("Runtime Evidence contains source without source-capture selection");
265
240
  };
266
241
  const scriptsComplete = (completeness) => !completeness.truncated_sections.includes("scripts") &&
267
242
  !completeness.unavailable_sections.includes("scripts") &&
@@ -5,7 +5,6 @@ import { javascriptRuntimeReconciliationResultSchema, } from "./javascriptRuntim
5
5
  export const createJavaScriptRuntimeReconciliationResult = (input) => {
6
6
  const completion = completionFlags(input);
7
7
  const semantic = {
8
- schema_version: 1,
9
8
  static_layers: staticLayerSummaries(input.layers),
10
9
  runtime_captures: captureSummaries(input.captures, input.runtime),
11
10
  graph: input.graph,
@@ -45,9 +44,9 @@ const captureSummaries = (captures, runtime) => captures.map((capture) => {
45
44
  kind: capture.kind,
46
45
  target_node_id: targetNode.node_id,
47
46
  target_key: capture.inspection.target.target_id,
48
- target_location: ("url" in capture.inspection.target
47
+ target_location: "url" in capture.inspection.target
49
48
  ? capture.inspection.target.url
50
- : capture.inspection.target.file_path).slice(0, 4_096),
49
+ : capture.inspection.target.file_path,
51
50
  frames: capture.inspection.frames.length,
52
51
  scripts: capture.inspection.scripts.items.length,
53
52
  workers: capture.inspection.workers.length,
@@ -70,7 +69,7 @@ const reconciliationSummary = (input) => ({
70
69
  });
71
70
  const sourceMapAuthority = (input) => ({
72
71
  used_for_primary_matching: false,
73
- static_layers_with_read_approval: input.layers.filter(({ sourceMapReadApproved }) => sourceMapReadApproved).length,
72
+ static_layer_count: input.layers.length,
74
73
  runtime_script_declarations: input.captures.reduce((total, capture) => total +
75
74
  (capture.kind === "browser"
76
75
  ? capture.inspection.scripts.items.filter(({ source_map_url: url }) => url !== null).length
@@ -78,27 +77,34 @@ const sourceMapAuthority = (input) => ({
78
77
  limitation: "Source-map declarations and approved original-source reads retain separate static authority and are not used as primary runtime byte matches.",
79
78
  });
80
79
  const reconciliationCoverage = (input, completion) => ({
81
- status: completion.outputTruncated || completion.inputTruncated
80
+ status: completion.outputTruncated || completion.inputStatus === "truncated"
82
81
  ? "truncated"
83
- : completion.inputPartial
82
+ : completion.inputStatus === "partial"
84
83
  ? "partial"
85
84
  : "complete-within-inputs",
86
- truncated: completion.outputTruncated || completion.inputTruncated,
85
+ truncated: completion.outputTruncated || completion.inputStatus === "truncated",
87
86
  omitted_runtime_entities: input.runtime.omittedEntities,
88
87
  omitted_reconciliation_items: input.matching.omittedItems,
89
88
  omitted_static_load_states: input.loadStates.omittedStates,
90
89
  omitted_graph_items: input.omittedGraphItems,
91
90
  });
92
- const completionFlags = (input) => ({
93
- outputTruncated: input.runtime.omittedEntities > 0 ||
94
- input.matching.omittedItems > 0 ||
95
- input.loadStates.omittedStates > 0 ||
96
- input.omittedGraphItems > 0,
97
- inputTruncated: input.layers.some(({ graph }) => graph.coverage.truncated) ||
98
- input.captures.some(({ inspection }) => inspection.completeness.conditions.includes("truncated")),
99
- inputPartial: input.layers.some(({ graph }) => graph.coverage.status !== "complete") ||
100
- input.captures.some(({ inspection }) => inspection.completeness.status !== "complete_within_window"),
101
- });
91
+ const completionFlags = (input) => {
92
+ const inputTruncated = input.layers.some(({ graph }) => graph.coverage.truncated) ||
93
+ input.captures.some(({ inspection }) => inspection.completeness.conditions.includes("truncated"));
94
+ const inputPartial = input.layers.some(({ graph }) => graph.coverage.status !== "complete") ||
95
+ input.captures.some(({ inspection }) => inspection.completeness.status !== "complete_within_window");
96
+ return {
97
+ outputTruncated: input.runtime.omittedEntities > 0 ||
98
+ input.matching.omittedItems > 0 ||
99
+ input.loadStates.omittedStates > 0 ||
100
+ input.omittedGraphItems > 0,
101
+ inputStatus: inputTruncated
102
+ ? "truncated"
103
+ : inputPartial
104
+ ? "partial"
105
+ : "complete",
106
+ };
107
+ };
102
108
  const reconciliationLimitations = (completion) => uniqueSorted([
103
109
  "Only caller-supplied, semantically verified Evidence records were reconciled.",
104
110
  "Digest equality establishes byte identity but not code reachability, module initialization, or feature execution.",
@@ -106,12 +112,12 @@ const reconciliationLimitations = (completion) => uniqueSorted([
106
112
  "Not-observed means absent from the bounded captures in scope, never globally unloaded.",
107
113
  "Caller-declared file and URL mappings are inference inputs and do not expand CDP origin or filesystem-root authority.",
108
114
  "Source-map authority remains separate from passive runtime authority.",
109
- ...(completion.inputPartial
115
+ ...(completion.inputStatus !== "complete"
110
116
  ? ["One or more static graphs or passive captures were incomplete."]
111
117
  : []),
112
118
  ...(completion.outputTruncated
113
119
  ? [
114
- "Caller limits omitted runtime entities or reconciliation classifications.",
120
+ "Runtime reconciliation omitted entities or classifications during projection.",
115
121
  ]
116
122
  : []),
117
123
  ]);