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
@@ -59,7 +59,7 @@ export const processTreeReconstructionSchema = z.strictObject({
59
59
  /** Root PID of the process tree. */
60
60
  root_pid: z.number().int().positive(),
61
61
  /** All reconstructed process nodes. */
62
- processes: z.array(processNodeSchema).min(0).max(10_000),
62
+ processes: z.array(processNodeSchema).min(0),
63
63
  /** Events that were consumed. */
64
64
  events_consumed: z.number().int().nonnegative(),
65
65
  /** Events that could not be matched. */
@@ -71,89 +71,90 @@ export const processTreeReconstructionSchema = z.strictObject({
71
71
  /** Whether any reparenting was detected. */
72
72
  has_reparenting: z.boolean().default(false),
73
73
  });
74
+ const applyProcessTreeEvent = (event, state) => {
75
+ let node = state.nodes.get(event.pid);
76
+ switch (event.type) {
77
+ case "spawn": {
78
+ if (!node) {
79
+ node = {
80
+ pid: event.pid,
81
+ ppid: event.ppid,
82
+ process_name: event.process_name,
83
+ executable: event.executable,
84
+ arguments: event.arguments,
85
+ children: [],
86
+ spawn_time_ms: event.at_ms,
87
+ exit_time_ms: null,
88
+ exit_code: null,
89
+ is_re_exec: false,
90
+ is_reparented: false,
91
+ previous_ppid: null,
92
+ };
93
+ state.nodes.set(event.pid, node);
94
+ }
95
+ if (event.ppid !== null) {
96
+ const parentChildren = state.children.get(event.ppid) ?? [];
97
+ parentChildren.push(event.pid);
98
+ state.children.set(event.ppid, parentChildren);
99
+ }
100
+ break;
101
+ }
102
+ case "exit":
103
+ if (node) {
104
+ node.exit_time_ms = event.at_ms;
105
+ node.exit_code = event.exit_code;
106
+ if (node.spawn_time_ms !== null &&
107
+ event.at_ms - node.spawn_time_ms < 100)
108
+ state.shortLivedDescendants++;
109
+ }
110
+ else
111
+ state.eventsUnmatched++;
112
+ break;
113
+ case "re_exec":
114
+ if (node) {
115
+ node.is_re_exec = true;
116
+ node.executable = event.executable ?? node.executable;
117
+ node.arguments = event.arguments;
118
+ state.hasReExec = true;
119
+ }
120
+ else
121
+ state.eventsUnmatched++;
122
+ break;
123
+ case "reparent":
124
+ if (node) {
125
+ node.previous_ppid = node.ppid;
126
+ node.ppid = event.ppid;
127
+ node.is_reparented = true;
128
+ state.hasReparenting = true;
129
+ }
130
+ else
131
+ state.eventsUnmatched++;
132
+ break;
133
+ case "signal":
134
+ case "name_change":
135
+ case "thread_create":
136
+ case "thread_exit":
137
+ // These events are recorded but don't modify the tree structure.
138
+ break;
139
+ }
140
+ };
74
141
  /** Reconstruct a process tree from event-backed capture. */
75
142
  export function reconstructProcessTree(events, rootPid) {
76
143
  const nodes = new Map();
77
144
  const children = new Map();
78
145
  let eventsConsumed = 0;
79
- let eventsUnmatched = 0;
80
- let hasReExec = false;
81
- let hasReparenting = false;
82
- let shortLivedDescendants = 0;
146
+ const state = {
147
+ nodes,
148
+ children,
149
+ eventsUnmatched: 0,
150
+ hasReExec: false,
151
+ hasReparenting: false,
152
+ shortLivedDescendants: 0,
153
+ };
83
154
  const sorted = [...events].sort((a, b) => a.at_ms - b.at_ms);
84
155
  for (const event of sorted) {
85
156
  eventsConsumed++;
86
- let node = nodes.get(event.pid);
87
- switch (event.type) {
88
- case "spawn": {
89
- if (!node) {
90
- node = {
91
- pid: event.pid,
92
- ppid: event.ppid,
93
- process_name: event.process_name,
94
- executable: event.executable,
95
- arguments: event.arguments,
96
- children: [],
97
- spawn_time_ms: event.at_ms,
98
- exit_time_ms: null,
99
- exit_code: null,
100
- is_re_exec: false,
101
- is_reparented: false,
102
- previous_ppid: null,
103
- };
104
- nodes.set(event.pid, node);
105
- }
106
- if (event.ppid !== null) {
107
- const parentChildren = children.get(event.ppid) ?? [];
108
- parentChildren.push(event.pid);
109
- children.set(event.ppid, parentChildren);
110
- }
111
- break;
112
- }
113
- case "exit": {
114
- if (node) {
115
- node.exit_time_ms = event.at_ms;
116
- node.exit_code = event.exit_code;
117
- if (node.spawn_time_ms !== null &&
118
- event.at_ms - node.spawn_time_ms < 100)
119
- shortLivedDescendants++;
120
- }
121
- else {
122
- eventsUnmatched++;
123
- }
124
- break;
125
- }
126
- case "re_exec": {
127
- if (node) {
128
- node.is_re_exec = true;
129
- node.executable = event.executable ?? node.executable;
130
- node.arguments = event.arguments;
131
- hasReExec = true;
132
- }
133
- else {
134
- eventsUnmatched++;
135
- }
136
- break;
137
- }
138
- case "reparent": {
139
- if (node) {
140
- node.previous_ppid = node.ppid;
141
- node.ppid = event.ppid;
142
- node.is_reparented = true;
143
- hasReparenting = true;
144
- }
145
- else {
146
- eventsUnmatched++;
147
- }
148
- break;
149
- }
150
- case "signal":
151
- case "name_change":
152
- case "thread_create":
153
- case "thread_exit":
154
- // These events are recorded but don't modify the tree structure
155
- break;
156
- }
157
+ applyProcessTreeEvent(event, state);
157
158
  }
158
159
  // Attach children to nodes
159
160
  for (const [pid, childPids] of children) {
@@ -165,10 +166,10 @@ export function reconstructProcessTree(events, rootPid) {
165
166
  root_pid: rootPid,
166
167
  processes: [...nodes.values()],
167
168
  events_consumed: eventsConsumed,
168
- events_unmatched: eventsUnmatched,
169
- short_lived_descendants: shortLivedDescendants,
170
- has_re_exec: hasReExec,
171
- has_reparenting: hasReparenting,
169
+ events_unmatched: state.eventsUnmatched,
170
+ short_lived_descendants: state.shortLivedDescendants,
171
+ has_re_exec: state.hasReExec,
172
+ has_reparenting: state.hasReparenting,
172
173
  };
173
174
  }
174
175
  /** Get all descendant PIDs of a given root PID. */
@@ -177,8 +178,10 @@ export function getDescendants(processes, rootPid) {
177
178
  const visited = new Set();
178
179
  const result = [];
179
180
  const queue = [rootPid];
180
- while (queue.length > 0) {
181
- const pid = queue.shift();
181
+ for (let head = 0; head < queue.length; head += 1) {
182
+ const pid = queue[head];
183
+ if (pid === undefined)
184
+ continue;
182
185
  if (visited.has(pid))
183
186
  continue;
184
187
  visited.add(pid);
@@ -201,14 +204,22 @@ export function containsProcess(processes, pid) {
201
204
  /** Get the maximum tree depth from the root. */
202
205
  export function maxTreeDepth(processes, rootPid) {
203
206
  const byPid = new Map(processes.map((p) => [p.pid, p]));
204
- function depth(pid, visited) {
205
- if (visited.has(pid))
206
- return 0;
207
- visited.add(pid);
208
- const node = byPid.get(pid);
207
+ const pending = [{ pid: rootPid, depth: 0 }];
208
+ const visited = new Set();
209
+ let maximumDepth = 0;
210
+ while (pending.length > 0) {
211
+ const current = pending.pop();
212
+ if (!current || visited.has(current.pid))
213
+ continue;
214
+ visited.add(current.pid);
215
+ const node = byPid.get(current.pid);
209
216
  if (!node || node.children.length === 0)
210
- return 0;
211
- return 1 + Math.max(...node.children.map((c) => depth(c, visited)));
217
+ continue;
218
+ const childDepth = current.depth + 1;
219
+ maximumDepth = Math.max(maximumDepth, childDepth);
220
+ for (const childPid of node.children)
221
+ if (!visited.has(childPid))
222
+ pending.push({ pid: childPid, depth: childDepth });
212
223
  }
213
- return depth(rootPid, new Set());
224
+ return maximumDepth;
214
225
  }
@@ -72,7 +72,6 @@ const executionEnvironmentSchema = z.object({
72
72
  });
73
73
  const evidenceBaseSchema = z
74
74
  .object({
75
- schema_version: z.literal(2),
76
75
  evidence_id: z.string().regex(/^ev_[a-f0-9]{64}$/u),
77
76
  subject: subjectSchema.nullable(),
78
77
  provider: providerSchema,
@@ -124,7 +123,6 @@ const canonicalJson = (value) => {
124
123
  return serialized;
125
124
  };
126
125
  const semanticProjection = (evidence) => ({
127
- schema_version: evidence.schema_version,
128
126
  subject: evidence.subject === null
129
127
  ? null
130
128
  : {
@@ -152,18 +150,13 @@ const semanticProjection = (evidence) => ({
152
150
  const computeEvidenceId = (evidence) => `ev_${sha256(canonicalJson(semanticProjection(evidence)))}`;
153
151
  /** Parse evidence and reject a syntactically valid but tampered semantic ID. */
154
152
  export const parseEvidence = (input) => {
155
- if (typeof input === "object" &&
156
- input !== null &&
157
- "schema_version" in input &&
158
- input.schema_version !== 2)
159
- throw new TypeError(`Unsupported evidence schema_version ${String(input.schema_version)}; Evidence v1 is not accepted. Produce Evidence v2.`);
160
153
  const evidence = evidenceRecordSchema.parse(input);
161
154
  const { evidence_id: evidenceId, ...withoutId } = evidence;
162
155
  if (computeEvidenceId(withoutId) !== evidenceId)
163
156
  throw new TypeError("Evidence semantic identifier does not match its record");
164
157
  return evidence;
165
158
  };
166
- /** Build deterministic Evidence v2 from an immutable artifact subject. */
159
+ /** Build deterministic Evidence from an immutable artifact subject. */
167
160
  export const createEvidence = (target, provider, observation) => {
168
161
  const subject = target === undefined
169
162
  ? null
@@ -175,7 +168,6 @@ export const createEvidence = (target, provider, observation) => {
175
168
  local_path: target.path,
176
169
  };
177
170
  const semantic = {
178
- schema_version: 2,
179
171
  subject: subject === null
180
172
  ? null
181
173
  : {
@@ -191,7 +183,7 @@ export const createEvidence = (target, provider, observation) => {
191
183
  ...(observation.analysisProfile === undefined
192
184
  ? {}
193
185
  : { analysis_profile: observation.analysisProfile }),
194
- predicate_type: observation.predicateType ?? "rea.analysis/v2",
186
+ predicate_type: observation.predicateType ?? "rea.analysis",
195
187
  operation: observation.operation,
196
188
  parameters: observation.parameters,
197
189
  raw_result: observation.rawResult ?? null,
@@ -21,7 +21,6 @@ const captureManifestSchema = z.object({
21
21
  predicate_type: z.string().min(1),
22
22
  });
23
23
  export const evidenceBundleSchema = z.object({
24
- bundle_version: z.literal(2),
25
24
  artifacts: z.array(artifactManifestSchema),
26
25
  providers: z.array(providerManifestSchema),
27
26
  environments: z.array(environmentManifestSchema),
@@ -34,7 +33,6 @@ export const evidenceBundleSchema = z.object({
34
33
  export const createEvidenceBundle = (records, unknowns = []) => {
35
34
  const sortedRecords = [...records].sort((left, right) => left.evidence_id.localeCompare(right.evidence_id));
36
35
  return {
37
- bundle_version: 2,
38
36
  artifacts: uniqueSorted(sortedRecords.flatMap(({ subject }) => subject === null
39
37
  ? []
40
38
  : [
@@ -55,7 +53,7 @@ export const createEvidenceBundle = (records, unknowns = []) => {
55
53
  },
56
54
  ]
57
55
  : []),
58
- captures: sortedRecords.flatMap((evidence) => evidence.predicate_type.startsWith("rea.process-capture/")
56
+ captures: sortedRecords.flatMap((evidence) => evidence.predicate_type === "rea.process-capture"
59
57
  ? [
60
58
  {
61
59
  evidence_id: evidence.evidence_id,
@@ -81,7 +79,7 @@ export const evidenceBundleForTarget = (bundle, sha256) => {
81
79
  return (record?.subject?.digest.sha256 === sha256 ||
82
80
  (unknown.mutation_evidence_ids.includes(id) &&
83
81
  record?.subject === null &&
84
- record.predicate_type === "rea.residual-unknown-mutation/v1"));
82
+ record.predicate_type === "rea.residual-unknown-mutation"));
85
83
  }));
86
84
  changed = retained.length !== unknowns.length;
87
85
  unknowns = retained;
@@ -157,7 +155,7 @@ const validateVerifiedResolution = (unknown, evidenceById) => {
157
155
  const evidence = evidenceById.get(evidenceId);
158
156
  return (unknown.supporting_evidence_ids.includes(evidenceId) &&
159
157
  evidence !== undefined &&
160
- evidence.predicate_type !== "rea.residual-unknown-mutation/v1" &&
158
+ evidence.predicate_type !== "rea.residual-unknown-mutation" &&
161
159
  evidenceQualifies(unknown, evidence));
162
160
  });
163
161
  if (qualifies !== true)
@@ -2,7 +2,7 @@ import { createHash } from "node:crypto";
2
2
  import canonicalize from "canonicalize";
3
3
  import { z } from "zod";
4
4
  const evidenceIdSchema = z.string().regex(/^ev_[a-f0-9]{64}$/u);
5
- const claimIdSchema = z.string().regex(/^[A-Za-z][A-Za-z0-9._-]{0,99}$/u);
5
+ const claimIdSchema = z.string().regex(/^[A-Za-z][A-Za-z0-9._-]*$/u);
6
6
  /** Terminal outcome recorded for one verifier claim. */
7
7
  export const evidenceCompletionStatusSchema = z.enum([
8
8
  "pass",
@@ -15,10 +15,10 @@ export const evidenceCompletionStatusSchema = z.enum([
15
15
  export const evidenceCompletionRecordSchema = z.strictObject({
16
16
  claim_id: claimIdSchema,
17
17
  status: evidenceCompletionStatusSchema,
18
- evidence_ids: z.array(evidenceIdSchema).min(1).max(100),
18
+ evidence_ids: z.array(evidenceIdSchema).min(1),
19
19
  });
20
20
  const completionSummarySchema = z.strictObject({
21
- total: z.number().int().min(1).max(10_000),
21
+ total: z.number().int().min(1),
22
22
  pass: z.number().int().nonnegative(),
23
23
  fail: z.number().int().nonnegative(),
24
24
  unsupported: z.number().int().nonnegative(),
@@ -27,9 +27,8 @@ const completionSummarySchema = z.strictObject({
27
27
  complete: z.boolean(),
28
28
  });
29
29
  const completionLedgerObjectSchema = z.strictObject({
30
- schema_version: z.literal(1),
31
30
  ledger_id: z.string().regex(/^ecl_[a-f0-9]{64}$/u),
32
- records: z.array(evidenceCompletionRecordSchema).min(1).max(10_000),
31
+ records: z.array(evidenceCompletionRecordSchema).min(1),
33
32
  summary: completionSummarySchema,
34
33
  });
35
34
  const compareIdentifiers = (left, right) => left < right ? -1 : left > right ? 1 : 0;
@@ -57,7 +56,7 @@ const canonicalJson = (value) => {
57
56
  return serialized;
58
57
  };
59
58
  const computeLedgerId = (records) => `ecl_${createHash("sha256")
60
- .update(canonicalJson({ schema_version: 1, records }))
59
+ .update(canonicalJson({ records }))
61
60
  .digest("hex")}`;
62
61
  const ledgerIssues = (ledger, context) => {
63
62
  if (!isSortedUnique(ledger.records.map((record) => record.claim_id)))
@@ -86,7 +85,7 @@ const ledgerIssues = (ledger, context) => {
86
85
  message: "Completion ledger identifier does not match its records",
87
86
  });
88
87
  };
89
- /** Strict path-free Evidence v2 completion ledger. */
88
+ /** Strict path-free Evidence completion ledger. */
90
89
  export const evidenceCompletionLedgerSchema = completionLedgerObjectSchema.superRefine(ledgerIssues);
91
90
  /** Build a canonical path-independent ledger from verifier claim outcomes. */
92
91
  export const createEvidenceCompletionLedger = (input) => {
@@ -103,7 +102,6 @@ export const createEvidenceCompletionLedger = (input) => {
103
102
  if (!isSortedUnique(record.evidence_ids))
104
103
  throw new TypeError("Completion Evidence IDs must be unique per claim");
105
104
  return evidenceCompletionLedgerSchema.parse({
106
- schema_version: 1,
107
105
  ledger_id: computeLedgerId(records),
108
106
  records,
109
107
  summary: summarize(records),
@@ -4,19 +4,15 @@ import { functionComparisonResultSchema, } from "./functionComparisonSchemas.js"
4
4
  import { overallStatus, summarize, canonicalJson, } from "./functionComparisonResults.js";
5
5
  import { compareDimensions } from "./functionComparisonDimensions.js";
6
6
  export { functionComparisonInputSchema, functionComparisonResultSchema, } from "./functionComparisonSchemas.js";
7
- /** Compare two explicit function Evidence page sets without fuzzy matching. */
8
- export const compareFunctions = (leftInput, rightInput, offset, limit) => {
7
+ /** Compare two complete function Evidence records without fuzzy matching. */
8
+ export const compareFunctions = (leftInput, rightInput) => {
9
9
  const left = parseFunctionEvidence(leftInput);
10
10
  const right = parseFunctionEvidence(rightInput);
11
- const links = [
12
- ...left.evidence.map(({ evidence_id: id }) => id),
13
- ...right.evidence.map(({ evidence_id: id }) => id),
14
- ];
11
+ const links = [left.evidence[0].evidence_id, right.evidence[0].evidence_id];
15
12
  const providersDiffer = canonicalJson(left.provider) !== canonicalJson(right.provider);
16
13
  const dimensions = compareDimensions(left, right, links, providersDiffer);
17
14
  const match = functionMatch(left, right);
18
15
  const changes = dimensions.filter(({ status }) => status !== "unchanged");
19
- const page = changes.slice(offset, offset + limit);
20
16
  return functionComparisonResultSchema.parse({
21
17
  status: overallStatus(dimensions, match.status),
22
18
  function_match: match,
@@ -24,13 +20,7 @@ export const compareFunctions = (leftInput, rightInput, offset, limit) => {
24
20
  right_subject_sha256: right.subject.digest.sha256,
25
21
  summary: summarize(dimensions),
26
22
  dimensions,
27
- changes: {
28
- items: page,
29
- offset,
30
- limit,
31
- total: changes.length,
32
- next_offset: offset + page.length < changes.length ? offset + page.length : null,
33
- },
23
+ changes,
34
24
  limitations: [
35
25
  ...new Set([
36
26
  ...left.limitations.map((item) => `Left: ${item}`),
@@ -123,14 +123,14 @@ export const stringAndNameProjection = (snapshot) => {
123
123
  : sorted(values);
124
124
  };
125
125
  export const sorted = (values) => [...values].sort((left, right) => canonicalJson(left).localeCompare(canonicalJson(right)));
126
- export const combineCoverage = (left, right) => ({
127
- items: [...left.items, ...right.items],
128
- total: left.total === null || right.total === null
129
- ? null
130
- : left.total + right.total,
131
- complete: left.complete && right.complete,
132
- truncated: left.truncated || right.truncated,
133
- });
126
+ export const combineCoverage = (left, right) => {
127
+ return {
128
+ items: [...left.items, ...right.items],
129
+ total: left.total + right.total,
130
+ complete: true,
131
+ truncated: false,
132
+ };
133
+ };
134
134
  export const project = (collection, mapper) => collection.items.map(mapper);
135
135
  export const isAutoName = (name) => /^(?:sub_[0-9a-f]+|fcn\.)/iu.test(name);
136
136
  const parseAddress = (value) => /^0x[0-9a-f]+$/iu.test(value) ? BigInt(value) : null;
@@ -1,19 +1,30 @@
1
1
  import { createHash } from "node:crypto";
2
2
  import canonicalize from "canonicalize";
3
- export const dimensionResult = (input) => ({
4
- dimension: input.dimension,
5
- status: input.status,
6
- left_digest: digest(input.left),
7
- right_digest: digest(input.right),
8
- left_count: input.leftCount,
9
- right_count: input.rightCount,
10
- text_delta: input.textDelta,
11
- conclusion_kind: input.status === "changed" && input.providersDiffer
12
- ? "contradiction"
13
- : "derived_relationship",
14
- evidence_links: [...input.links],
15
- limitations: [...input.limitations],
16
- });
3
+ export const dimensionResult = (input) => {
4
+ const context = {
5
+ dimension: input.dimension,
6
+ left_digest: digest(input.left),
7
+ right_digest: digest(input.right),
8
+ left_count: input.leftCount,
9
+ right_count: input.rightCount,
10
+ text_delta: input.textDelta,
11
+ evidence_links: [...input.links],
12
+ limitations: [...input.limitations],
13
+ };
14
+ if (input.status === "unchanged")
15
+ return {
16
+ ...context,
17
+ status: "unchanged",
18
+ conclusion_kind: "derived_relationship",
19
+ };
20
+ return {
21
+ ...context,
22
+ status: "changed",
23
+ conclusion_kind: input.providersDiffer
24
+ ? "contradiction"
25
+ : "derived_relationship",
26
+ };
27
+ };
17
28
  export const unresolvedDimension = (input) => ({
18
29
  dimension: input.dimension,
19
30
  status: input.status,
@@ -30,7 +41,6 @@ export const overallStatus = (dimensions, match) => {
30
41
  if (dimensions.some(({ status }) => status === "truncated"))
31
42
  return "truncated";
32
43
  if (match === "ambiguous" ||
33
- match === "unknown" ||
34
44
  dimensions.some(({ status }) => status === "unknown"))
35
45
  return "unknown";
36
46
  if (match === "mismatched")
@@ -1,8 +1,7 @@
1
1
  import { z } from "zod";
2
+ import { evidenceSchema } from "./evidence.js";
2
3
  const comparisonStatusSchema = z.enum([
3
4
  "unchanged",
4
- "added",
5
- "removed",
6
5
  "changed",
7
6
  "truncated",
8
7
  "unknown",
@@ -19,44 +18,67 @@ const dimensionNameSchema = z.enum([
19
18
  ]);
20
19
  const evidenceIdSchema = z.string().regex(/^ev_[a-f0-9]{64}$/u);
21
20
  const digestSchema = z.string().regex(/^[a-f0-9]{64}$/u);
22
- /** Strict bounded input for explicit function-to-function comparison. */
21
+ /** Inputs for explicit function-to-function comparison. */
23
22
  export const functionComparisonInputSchema = z.strictObject({
24
- left_evidence_ids: z.array(evidenceIdSchema).min(1).max(100),
25
- right_evidence_ids: z.array(evidenceIdSchema).min(1).max(100),
26
- offset: z.number().int().min(0).default(0),
27
- limit: z.number().int().min(1).max(100).default(100),
28
- unknown_registry_approved: z.literal(true).optional(),
23
+ left: evidenceSchema,
24
+ right: evidenceSchema,
29
25
  });
30
26
  const textDeltaSchema = z.object({
31
27
  added_lines: z.number().int().min(0),
32
28
  removed_lines: z.number().int().min(0),
33
29
  hunks: z.number().int().min(0),
34
30
  });
35
- const functionDimensionSchema = z.object({
31
+ const functionDimensionContextShape = {
36
32
  dimension: dimensionNameSchema,
37
- status: comparisonStatusSchema,
38
- left_digest: digestSchema.nullable(),
39
- right_digest: digestSchema.nullable(),
40
33
  left_count: z.number().int().min(0).nullable(),
41
34
  right_count: z.number().int().min(0).nullable(),
42
- text_delta: textDeltaSchema.nullable(),
43
- conclusion_kind: z.enum([
44
- "derived_relationship",
45
- "contradiction",
46
- "unresolved_branch",
47
- ]),
48
- evidence_links: z.array(evidenceIdSchema).min(2).max(200),
35
+ evidence_links: z.array(evidenceIdSchema).min(2),
49
36
  limitations: z.array(z.string()),
50
- });
51
- /** Deterministic dimension-classified function comparison Evidence payload. */
52
- export const functionComparisonResultSchema = z.object({
53
- status: comparisonStatusSchema,
54
- function_match: z.object({
55
- status: z.enum(["matched", "mismatched", "ambiguous", "unknown"]),
56
- method: z.enum(["explicit", "symbol"]),
37
+ };
38
+ const functionDimensionSchema = z.union([
39
+ z.object({
40
+ ...functionDimensionContextShape,
41
+ status: z.literal("unchanged"),
42
+ left_digest: digestSchema,
43
+ right_digest: digestSchema,
44
+ text_delta: textDeltaSchema.nullable(),
45
+ conclusion_kind: z.literal("derived_relationship"),
46
+ }),
47
+ z.object({
48
+ ...functionDimensionContextShape,
49
+ status: z.literal("changed"),
50
+ left_digest: digestSchema,
51
+ right_digest: digestSchema,
52
+ text_delta: textDeltaSchema.nullable(),
53
+ conclusion_kind: z.enum(["derived_relationship", "contradiction"]),
54
+ }),
55
+ z.object({
56
+ ...functionDimensionContextShape,
57
+ status: z.enum(["truncated", "unknown"]),
58
+ left_digest: z.null(),
59
+ right_digest: z.null(),
60
+ text_delta: z.null(),
61
+ conclusion_kind: z.literal("unresolved_branch"),
62
+ }),
63
+ ]);
64
+ const functionMatchSchema = z.union([
65
+ z.object({
66
+ status: z.literal("matched"),
67
+ method: z.literal("symbol"),
57
68
  left_name: z.string(),
58
69
  right_name: z.string(),
59
70
  }),
71
+ z.object({
72
+ status: z.enum(["mismatched", "ambiguous"]),
73
+ method: z.literal("explicit"),
74
+ left_name: z.string(),
75
+ right_name: z.string(),
76
+ }),
77
+ ]);
78
+ /** Deterministic dimension-classified function comparison Evidence payload. */
79
+ export const functionComparisonResultSchema = z.object({
80
+ status: comparisonStatusSchema,
81
+ function_match: functionMatchSchema,
60
82
  left_subject_sha256: digestSchema,
61
83
  right_subject_sha256: digestSchema,
62
84
  summary: z.object({
@@ -66,12 +88,6 @@ export const functionComparisonResultSchema = z.object({
66
88
  unknown: z.number().int().min(0),
67
89
  }),
68
90
  dimensions: z.array(functionDimensionSchema).length(8),
69
- changes: z.object({
70
- items: z.array(functionDimensionSchema).max(100),
71
- offset: z.number().int().min(0),
72
- limit: z.number().int().min(1).max(100),
73
- total: z.number().int().min(0),
74
- next_offset: z.number().int().min(0).nullable(),
75
- }),
91
+ changes: z.array(functionDimensionSchema),
76
92
  limitations: z.array(z.string()),
77
93
  });