rea-agents 3.1.0 → 3.2.1

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 (590) hide show
  1. package/README.md +72 -95
  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/AnalysisSnapshotCache.js +0 -1
  6. package/dist/application/AnalysisSnapshotFiles.js +7 -7
  7. package/dist/application/AndroidApplicationService.js +1 -1
  8. package/dist/application/AppleApplicationService.js +1 -1
  9. package/dist/application/ArtifactExtraction.js +35 -54
  10. package/dist/application/ArtifactExtractionDestination.js +17 -0
  11. package/dist/application/ArtifactGraphConstruction.js +2 -17
  12. package/dist/application/ArtifactInventory/classify.js +2 -6
  13. package/dist/application/ArtifactInventory/hash.js +2 -20
  14. package/dist/application/ArtifactInventory/scanCanonical.js +8 -12
  15. package/dist/application/ArtifactInventory/scanReader.js +69 -51
  16. package/dist/application/ArtifactInventory.js +6 -14
  17. package/dist/application/AuthorizedArtifactInventory.js +3 -13
  18. package/dist/application/BinarySession.js +41 -13
  19. package/dist/application/BinarySessionComposition.js +0 -11
  20. package/dist/application/BinarySessionOpen.js +2 -1
  21. package/dist/application/BinarySessionRecords.js +5 -93
  22. package/dist/application/BinarySessionStatus.js +5 -16
  23. package/dist/application/BinaryTargetResolver.js +216 -0
  24. package/dist/application/BrowserEvidence.js +42 -58
  25. package/dist/application/BrowserObservationService.js +3 -6
  26. package/dist/application/BrowserScenarioCaptureService.js +3 -6
  27. package/dist/application/BrowserScenarioEvidence.js +3 -3
  28. package/dist/application/CallPathTracing.js +2 -36
  29. package/dist/application/CapabilityInventory.js +10 -15
  30. package/dist/application/ClientConfigurationDocument.js +27 -0
  31. package/dist/application/ClientRegistrationStatus.js +16 -13
  32. package/dist/application/CommandShimReplay.js +14 -1
  33. package/dist/application/DirectAnalysis.js +22 -46
  34. package/dist/application/DirectAnalysisStatus.js +5 -61
  35. package/dist/application/Doctor.js +11 -32
  36. package/dist/application/DoctorDiagnostics.js +1 -2
  37. package/dist/application/DoctorScope.js +1 -1
  38. package/dist/application/ElectronActiveEvidence.js +3 -8
  39. package/dist/application/ElectronActiveObservationService.js +3 -6
  40. package/dist/application/ElectronBoundaryAnalysis.js +7 -8
  41. package/dist/application/ElectronBoundaryGraphContext.js +1 -1
  42. package/dist/application/ElectronBoundaryGraphIpc.js +3 -3
  43. package/dist/application/ElectronBoundaryGraphNative.js +1 -2
  44. package/dist/application/ElectronBoundaryGraphWindows.js +6 -8
  45. package/dist/application/ElectronEvidence.js +4 -7
  46. package/dist/application/ElectronObservationService.js +5 -9
  47. package/dist/application/EnhancedLiteralTracing.js +42 -65
  48. package/dist/application/EnhancedTools.js +76 -44
  49. package/dist/application/EvidenceBundleCommands.js +11 -11
  50. package/dist/application/EvidenceBundleFiles.js +9 -15
  51. package/dist/application/EvidenceLedger.js +6 -41
  52. package/dist/application/FilesystemSnapshot.js +2 -3
  53. package/dist/application/InterfaceBuilderAnalysis.js +266 -0
  54. package/dist/application/InventoryProjectionEvidence.js +4 -2
  55. package/dist/application/InvestigationProviders.js +1 -1
  56. package/dist/application/JavaScriptApplicationEvidence.js +2 -5
  57. package/dist/application/JavaScriptApplicationEvidenceGraph.js +6 -10
  58. package/dist/application/JavaScriptApplicationService.js +6 -29
  59. package/dist/application/JavaScriptApplicationWorkflowEvidence.js +5 -5
  60. package/dist/application/JavaScriptApplicationWorkflowService.js +0 -8
  61. package/dist/application/JavaScriptArtifactAnalysis.js +38 -127
  62. package/dist/application/JavaScriptArtifactFiles.js +67 -107
  63. package/dist/application/JavaScriptArtifactGraphAccumulator.js +0 -7
  64. package/dist/application/JavaScriptArtifactGraphBuilder.js +7 -58
  65. package/dist/application/JavaScriptArtifactGraphBundlers.js +1 -6
  66. package/dist/application/JavaScriptArtifactGraphContext.js +12 -39
  67. package/dist/application/JavaScriptArtifactGraphDocuments.js +4 -11
  68. package/dist/application/JavaScriptArtifactGraphEvidence.js +0 -14
  69. package/dist/application/JavaScriptArtifactGraphFindings.js +3 -3
  70. package/dist/application/JavaScriptArtifactGraphStructure.js +16 -17
  71. package/dist/application/JavaScriptArtifactPathResolution.js +61 -49
  72. package/dist/application/JavaScriptArtifactReconstruction.js +5 -10
  73. package/dist/application/JavaScriptArtifactReconstructionInput.js +2 -14
  74. package/dist/application/JavaScriptJsonModules.js +2 -2
  75. package/dist/application/JavaScriptModuleRelationships.js +22 -27
  76. package/dist/application/JavaScriptReplayPlanning.js +9 -3
  77. package/dist/application/JavaScriptReplayService.js +6 -32
  78. package/dist/application/JavaScriptReturnShapeProjection.js +12 -42
  79. package/dist/application/JavaScriptRuntimeObservationEvidence.js +7 -8
  80. package/dist/application/JavaScriptRuntimeObservationService.js +4 -8
  81. package/dist/application/JavaScriptRuntimeReconciliationEvidence.js +2 -3
  82. package/dist/application/JavaScriptSemanticGraphBuilder.js +11 -41
  83. package/dist/application/JavaScriptSemanticGraphConstruction.js +5 -29
  84. package/dist/application/JavaScriptSemanticGraphEvidence.js +1 -1
  85. package/dist/application/JavaScriptSemanticGraphFingerprintProjection.js +1 -1
  86. package/dist/application/JavaScriptSemanticGraphFlowProjection.js +0 -13
  87. package/dist/application/JavaScriptSemanticGraphProjection.js +1 -3
  88. package/dist/application/JavaScriptSemanticTraceService.js +1 -10
  89. package/dist/application/JsonFiles.js +79 -0
  90. package/dist/application/LinuxHopper.js +11 -9
  91. package/dist/application/LoopbackReplay.js +26 -23
  92. package/dist/application/LoopbackReplayRecorder.js +29 -1
  93. package/dist/application/ManagedApplicationGraphService.js +1 -2
  94. package/dist/application/ManagedMemberComparisonService.js +11 -41
  95. package/dist/application/ManagedNativeVerificationService.js +1 -2
  96. package/dist/application/ManagedReconstructionService.js +1 -1
  97. package/dist/application/ManagedRuntimeCorrelationService.js +5 -8
  98. package/dist/application/NativeApiInspection.js +2 -7
  99. package/dist/application/NativeUiActionTrace.js +394 -0
  100. package/dist/application/NodeRuntimeCharacterizationService.js +3 -7
  101. package/dist/application/PermissionAuthority.js +15 -7
  102. package/dist/application/PermissionFailure.js +5 -0
  103. package/dist/application/ProcessCaptureAuthority.js +5 -7
  104. package/dist/application/ProcessCaptureJournal.js +3 -2
  105. package/dist/application/ProcessCaptureLifecycle.js +5 -12
  106. package/dist/application/ProcessCheckpoints.js +29 -11
  107. package/dist/application/ProcessCli.js +6 -16
  108. package/dist/application/ProcessEvidence.js +5 -7
  109. package/dist/application/ProcessHarness.js +52 -17
  110. package/dist/application/ProcessReactiveCoordinator.js +2 -4
  111. package/dist/application/ProcessReactiveEffects.js +9 -3
  112. package/dist/application/ProcessReactiveHarness.js +13 -7
  113. package/dist/application/ProcessSampling.js +2 -4
  114. package/dist/application/ProcessTimer.js +39 -0
  115. package/dist/application/ProjectPermissionStore.js +39 -96
  116. package/dist/application/RealHopperAssertions.js +20 -66
  117. package/dist/application/ReconstructionCoverageService.js +12 -58
  118. package/dist/application/ReconstructionObligationAuthority.js +2 -2
  119. package/dist/application/ReconstructionObligationCandidates.js +4 -4
  120. package/dist/application/ReconstructionObligationLedgerEvaluation.js +8 -15
  121. package/dist/application/ReconstructionObligationLedgerProjection.js +3 -7
  122. package/dist/application/ReconstructionObligationLedgerService.js +19 -38
  123. package/dist/application/ReferenceSourceImport.js +19 -45
  124. package/dist/application/ReferenceSourceImportEntries.js +2 -4
  125. package/dist/application/ReferenceSourceImportPolicy.js +5 -32
  126. package/dist/application/ReferenceSourceImportTypes.js +0 -16
  127. package/dist/application/RuntimeExecutableDiagnostics.js +55 -29
  128. package/dist/application/SessionProviderRouter.js +2 -2
  129. package/dist/application/Setup.js +1 -3
  130. package/dist/application/SetupClientConfiguration.js +22 -93
  131. package/dist/application/SetupRegistrationEnvironment.js +0 -7
  132. package/dist/application/StoreFileLock.js +119 -0
  133. package/dist/application/TerminalRenderer.js +2 -3
  134. package/dist/application/Uninstall.js +9 -14
  135. package/dist/application/UnknownEvidence.js +1 -1
  136. package/dist/artifacts/ArtifactPaths.js +2 -5
  137. package/dist/artifacts/ArtifactProvider.js +36 -58
  138. package/dist/artifacts/DirectoryArtifactReader.js +13 -8
  139. package/dist/artifacts/MachOSliceArtifactReader.js +1 -5
  140. package/dist/artifacts/NativeDmgArtifactReader.js +11 -11
  141. package/dist/artifacts/NibArchive.js +269 -0
  142. package/dist/artifacts/SafeOutputTree.js +15 -24
  143. package/dist/browser/BrowserProcessStartup.js +1 -2
  144. package/dist/browser/CdpAuthorizedMainFrame.js +16 -0
  145. package/dist/browser/CdpBrowserProvider.js +3 -13
  146. package/dist/browser/CdpCanonicalJsonDigest.js +9 -0
  147. package/dist/browser/CdpCaptureDocuments.js +28 -76
  148. package/dist/browser/CdpCaptureEventBodyShapes.js +13 -33
  149. package/dist/browser/CdpCaptureEventHandlers.js +22 -87
  150. package/dist/browser/CdpCaptureEvents.js +2 -8
  151. package/dist/browser/CdpCaptureStorage.js +9 -20
  152. package/dist/browser/CdpCaptureStorageFingerprints.js +85 -98
  153. package/dist/browser/CdpCaptureValues.js +21 -21
  154. package/dist/browser/CdpConnection.js +10 -25
  155. package/dist/browser/CdpElectronInspection.js +26 -50
  156. package/dist/browser/CdpElectronProvider.js +10 -35
  157. package/dist/browser/CdpElectronScriptEvents.js +8 -16
  158. package/dist/browser/CdpElectronScripts.js +6 -35
  159. package/dist/browser/CdpElectronWorkers.js +6 -10
  160. package/dist/browser/CdpEndpoint.js +25 -41
  161. package/dist/browser/CdpObservationSession.js +14 -26
  162. package/dist/browser/CdpPageCapture.js +34 -48
  163. package/dist/browser/CdpPageCaptureScripts.js +1 -19
  164. package/dist/browser/CdpPageCaptureWorkers.js +6 -10
  165. package/dist/browser/CdpSafeMetadata.js +19 -22
  166. package/dist/browser/CdpScreenshot.js +3 -5
  167. package/dist/browser/CdpTargetSession.js +1 -2
  168. package/dist/browser/CdpWebMcpDiscovery.js +13 -22
  169. package/dist/browser/ElectronFileScope.js +8 -19
  170. package/dist/browser/JavaScriptRuntimeScope.js +9 -14
  171. package/dist/browser/PlaywrightBrowserScenarioProvider.js +31 -64
  172. package/dist/browser/PlaywrightElectronActiveActions.js +54 -69
  173. package/dist/browser/PlaywrightElectronActiveProvider.js +14 -34
  174. package/dist/browser/PlaywrightExecutionBoundary.js +16 -5
  175. package/dist/browser/PlaywrightScenarioActions.js +3 -7
  176. package/dist/browser/PlaywrightScenarioArtifacts.js +23 -92
  177. package/dist/browser/PlaywrightScenarioBrowser.js +3 -5
  178. package/dist/browser/PlaywrightScenarioEvents.js +45 -94
  179. package/dist/browser/PlaywrightScenarioSession.js +14 -30
  180. package/dist/browser/PngVisualDiff.js +22 -14
  181. package/dist/browser/SensitiveTextCapture.js +0 -17
  182. package/dist/browser/V8InspectorCaptureProjection.js +7 -8
  183. package/dist/browser/V8InspectorEndpoint.js +12 -14
  184. package/dist/browser/V8InspectorProvider.js +20 -61
  185. package/dist/browser/WebSourceMapFetcher.js +56 -176
  186. package/dist/catalogIdentity.js +0 -54
  187. package/dist/cli/artifactCommands.js +49 -77
  188. package/dist/cli/coreAnalysisCommands.js +83 -133
  189. package/dist/cli/javascriptApplicationAnalysis.js +1 -9
  190. package/dist/cli/managedCommands.js +5 -270
  191. package/dist/cli/setupCommands.js +3 -12
  192. package/dist/cli/utilityCommands.js +7 -41
  193. package/dist/cli.js +0 -2
  194. package/dist/cliApplicationCommands.js +42 -112
  195. package/dist/cliBrowserAdvancedCommands.js +10 -106
  196. package/dist/cliBrowserCommands.js +15 -127
  197. package/dist/cliBrowserContext.js +30 -0
  198. package/dist/cliCommandNames.js +4 -5
  199. package/dist/cliElectronCommands.js +8 -72
  200. package/dist/cliEvidenceCommands.js +8 -77
  201. package/dist/cliJavaScriptRuntimeCommands.js +9 -91
  202. package/dist/cliJsonInput.js +4 -14
  203. package/dist/cliObservationOptions.js +11 -96
  204. package/dist/cliPolicyCommands.js +2 -17
  205. package/dist/cliProcessCommands.js +3 -3
  206. package/dist/cliSetup.js +0 -13
  207. package/dist/config/browserScenario.js +2 -2
  208. package/dist/config/environment.js +0 -9
  209. package/dist/config/parseConfig.js +1 -33
  210. package/dist/config/parsers.js +6 -27
  211. package/dist/config/passiveObservation.js +7 -77
  212. package/dist/config/permissions.js +0 -7
  213. package/dist/contracts/analysisSearchContract.js +2 -5
  214. package/dist/contracts/applicationToolContracts.js +56 -109
  215. package/dist/contracts/applicationWorkflowInputContracts.js +27 -102
  216. package/dist/contracts/artifactComparisonExample.js +58 -60
  217. package/dist/contracts/artifactToolContracts.js +20 -67
  218. package/dist/contracts/browserScenarioToolContracts.js +6 -51
  219. package/dist/contracts/browserToolContracts.js +8 -73
  220. package/dist/contracts/electronToolContracts.js +8 -108
  221. package/dist/contracts/enhancedInputs.js +23 -54
  222. package/dist/contracts/errorSchemas.js +0 -1
  223. package/dist/contracts/functionComparisonExample.js +10 -24
  224. package/dist/contracts/functionInstructionContract.js +1 -3
  225. package/dist/contracts/functionWorkflowToolContracts.js +2 -2
  226. package/dist/contracts/hopperMemoryContracts.js +3 -3
  227. package/dist/contracts/investigationExamples.js +14 -11
  228. package/dist/contracts/javascriptApplicationWorkflowExamples.js +12 -19
  229. package/dist/contracts/javascriptRuntimeObservationToolContracts.js +2 -20
  230. package/dist/contracts/javascriptRuntimeReconciliationExample.js +45 -12
  231. package/dist/contracts/managedToolContracts.js +6 -95
  232. package/dist/contracts/managedWorkflowExamples.js +77 -128
  233. package/dist/contracts/managedWorkflowToolContracts.js +51 -77
  234. package/dist/contracts/nativeToolContracts.js +7 -11
  235. package/dist/contracts/processCaptureExample.js +2 -69
  236. package/dist/contracts/promptContracts.js +49 -67
  237. package/dist/contracts/providerSelection.js +0 -1
  238. package/dist/contracts/reconstructionReadinessExample.js +1 -6
  239. package/dist/contracts/sessionStatusContract.js +1 -17
  240. package/dist/contracts/sessionToolSchemas.js +6 -15
  241. package/dist/contracts/toolContractExamples.js +11 -11
  242. package/dist/contracts/toolContractHelpers.js +0 -4
  243. package/dist/contracts/toolContracts.js +60 -71
  244. package/dist/contracts/toolEffects.js +5 -13
  245. package/dist/contracts/toolOutputSchemaGroups.js +37 -91
  246. package/dist/contracts/toolOutputSchemaPrimitives.js +16 -56
  247. package/dist/contracts/toolSchemaMetadata.js +8 -19
  248. package/dist/contracts/unknownContractExamples.js +0 -2
  249. package/dist/domain/analysisErrorPresentation.js +46 -54
  250. package/dist/domain/analysisErrorProjection.js +28 -37
  251. package/dist/domain/analysisProfile.js +3 -31
  252. package/dist/domain/analysisSnapshot.js +3 -12
  253. package/dist/domain/androidApplication.js +15 -54
  254. package/dist/domain/appleApplication.js +24 -67
  255. package/dist/domain/artifactComparison.js +11 -29
  256. package/dist/domain/artifactGraph.js +14 -44
  257. package/dist/domain/artifactInspection.js +38 -69
  258. package/dist/domain/artifactInventoryEvidence.js +27 -21
  259. package/dist/domain/binaryTarget.js +2 -221
  260. package/dist/domain/browserCaptureComparison.js +47 -24
  261. package/dist/domain/browserObservation.js +28 -193
  262. package/dist/domain/browserObservationSchemas.js +5 -23
  263. package/dist/domain/browserScenario.js +11 -14
  264. package/dist/domain/browserScenarioCapture.js +11 -12
  265. package/dist/domain/browserScenarioCaptureValues.js +146 -84
  266. package/dist/domain/browserScenarioDiff.js +2 -59
  267. package/dist/domain/browserScenarioDiffEvidence.js +51 -0
  268. package/dist/domain/browserScenarioDiffValues.js +21 -38
  269. package/dist/domain/browserScenarioValues.js +80 -109
  270. package/dist/domain/browserSession.js +4 -7
  271. package/dist/domain/bundleComparison.js +6 -32
  272. package/dist/domain/bytecodeProvider.js +20 -19
  273. package/dist/domain/callPath.js +47 -167
  274. package/dist/domain/callPathSchemas.js +79 -0
  275. package/dist/domain/changedBehavior.js +34 -60
  276. package/dist/domain/completionLedgerGeneration.js +8 -14
  277. package/dist/domain/conformancePackage.js +126 -97
  278. package/dist/domain/conformanceReplay.js +36 -8
  279. package/dist/domain/conformanceTrustGate.js +23 -14
  280. package/dist/domain/customProtocolCapture.js +1 -1
  281. package/dist/domain/electronActiveObservation.js +70 -103
  282. package/dist/domain/electronObservation.js +14 -80
  283. package/dist/domain/electronStaticAnalysisBrowser.js +36 -46
  284. package/dist/domain/electronStaticAnalysisIpc.js +38 -14
  285. package/dist/domain/electronStaticAnalysisNative.js +1 -8
  286. package/dist/domain/electronStaticAnalysisValues.js +10 -17
  287. package/dist/domain/errors.js +33 -54
  288. package/dist/domain/eventProcessTree.js +20 -12
  289. package/dist/domain/evidence.js +2 -10
  290. package/dist/domain/evidenceBundle.js +3 -5
  291. package/dist/domain/evidenceCompletionLedger.js +6 -8
  292. package/dist/domain/functionComparison.js +4 -14
  293. package/dist/domain/functionComparisonNormalization.js +4 -11
  294. package/dist/domain/functionComparisonResults.js +25 -15
  295. package/dist/domain/functionComparisonSchemas.js +49 -33
  296. package/dist/domain/functionDossierEvidence.js +31 -156
  297. package/dist/domain/hopperStartupFailure.js +1 -1
  298. package/dist/domain/hopperValues.js +15 -136
  299. package/dist/domain/interfaceBuilderGraph.js +654 -0
  300. package/dist/domain/javascriptApplicationAnalysis.js +8 -112
  301. package/dist/domain/javascriptApplicationChangeGraph.js +22 -82
  302. package/dist/domain/javascriptApplicationEvidenceSchemas.js +59 -47
  303. package/dist/domain/javascriptApplicationGraph.js +3 -13
  304. package/dist/domain/javascriptApplicationGraphSchemas.js +12 -34
  305. package/dist/domain/javascriptApplicationVersionComparison.js +26 -30
  306. package/dist/domain/javascriptApplicationVersionComparisonSchemas.js +123 -68
  307. package/dist/domain/javascriptApplicationVersionItems.js +120 -53
  308. package/dist/domain/javascriptApplicationVersionKeys.js +24 -11
  309. package/dist/domain/javascriptAstFingerprint.js +25 -58
  310. package/dist/domain/javascriptAstValues.js +9 -0
  311. package/dist/domain/javascriptExportInstrumentation.js +2 -4
  312. package/dist/domain/javascriptExportShapeComparison.js +6 -7
  313. package/dist/domain/javascriptExportShapeComparisonSchemas.js +68 -75
  314. package/dist/domain/javascriptExportShapeSelection.js +17 -19
  315. package/dist/domain/javascriptFeatureSeed.js +20 -12
  316. package/dist/domain/javascriptFeatureTrace.js +13 -67
  317. package/dist/domain/javascriptFeatureTraceSchemas.js +24 -52
  318. package/dist/domain/javascriptFeatureTraversal.js +1 -44
  319. package/dist/domain/javascriptNativeHandoff.js +1 -1
  320. package/dist/domain/javascriptReplay.js +24 -41
  321. package/dist/domain/javascriptRuntimeLoadState.js +3 -8
  322. package/dist/domain/javascriptRuntimeObservation.js +42 -103
  323. package/dist/domain/javascriptRuntimeReconciliation.js +1 -3
  324. package/dist/domain/javascriptRuntimeReconciliationActive.js +8 -17
  325. package/dist/domain/javascriptRuntimeReconciliationGraph.js +10 -23
  326. package/dist/domain/javascriptRuntimeReconciliationMatching.js +18 -12
  327. package/dist/domain/javascriptRuntimeReconciliationParsing.js +16 -45
  328. package/dist/domain/javascriptRuntimeReconciliationResult.js +4 -5
  329. package/dist/domain/javascriptRuntimeReconciliationRuntime.js +8 -12
  330. package/dist/domain/javascriptRuntimeReconciliationSchemas.js +33 -48
  331. package/dist/domain/javascriptRuntimeStaticCandidates.js +3 -3
  332. package/dist/domain/javascriptSemanticAnalysis.js +12 -45
  333. package/dist/domain/javascriptSemanticAsyncEffects.js +1 -9
  334. package/dist/domain/javascriptSemanticCallResolution.js +6 -16
  335. package/dist/domain/javascriptSemanticCalls.js +5 -32
  336. package/dist/domain/javascriptSemanticChildProcesses.js +1 -11
  337. package/dist/domain/javascriptSemanticCoverage.js +11 -0
  338. package/dist/domain/javascriptSemanticDataEffectHelpers.js +1 -8
  339. package/dist/domain/javascriptSemanticDataEffects.js +1 -11
  340. package/dist/domain/javascriptSemanticFingerprints.js +3 -5
  341. package/dist/domain/javascriptSemanticGraphSchemas.js +25 -51
  342. package/dist/domain/javascriptSemanticGraphSerialization.js +2 -13
  343. package/dist/domain/javascriptSemanticIr.js +1 -29
  344. package/dist/domain/javascriptSemanticObjects.js +1 -5
  345. package/dist/domain/javascriptSemanticPrimitives.js +2 -9
  346. package/dist/domain/javascriptSemanticProjection.js +0 -18
  347. package/dist/domain/javascriptSemanticPromises.js +9 -16
  348. package/dist/domain/javascriptSemanticProvenance.js +16 -19
  349. package/dist/domain/javascriptSemanticQuery.js +17 -139
  350. package/dist/domain/javascriptSemanticQueryAssessment.js +9 -37
  351. package/dist/domain/javascriptSemanticQueryIdentity.js +2 -23
  352. package/dist/domain/javascriptSemanticQuerySchemas.js +14 -107
  353. package/dist/domain/javascriptSemanticResources.js +1 -6
  354. package/dist/domain/javascriptSemanticReturns.js +10 -27
  355. package/dist/domain/javascriptSemanticValueTypes.js +1 -0
  356. package/dist/domain/javascriptSemanticValues.js +44 -62
  357. package/dist/domain/javascriptStaticAnalysis.js +21 -43
  358. package/dist/domain/javascriptStaticAnalysisBundler.js +34 -93
  359. package/dist/domain/javascriptStaticAnalysisCalls.js +17 -16
  360. package/dist/domain/javascriptStaticAnalysisFindings.js +3 -19
  361. package/dist/domain/javascriptStaticAnalysisHelpers.js +47 -88
  362. package/dist/domain/javascriptStaticAnalysisState.js +1 -5
  363. package/dist/domain/javascriptStaticAnalysisTypes.js +1 -0
  364. package/dist/domain/jsonShape.js +7 -33
  365. package/dist/domain/localPath.js +7 -0
  366. package/dist/domain/managedApplicationGraph.js +9 -41
  367. package/dist/domain/managedApplicationGraphCoverage.js +24 -156
  368. package/dist/domain/managedApplicationGraphNodes.js +10 -13
  369. package/dist/domain/managedArtifact.js +14 -27
  370. package/dist/domain/managedMemberComparison.js +90 -92
  371. package/dist/domain/managedMemberComparisonCoverage.js +11 -33
  372. package/dist/domain/managedMemberComparisonItems.js +221 -0
  373. package/dist/domain/managedMemberComparisonMatch.js +8 -208
  374. package/dist/domain/managedNativeVerification.js +3 -6
  375. package/dist/domain/managedNativeVerificationMatch.js +55 -59
  376. package/dist/domain/managedNativeVerificationSchemas.js +83 -47
  377. package/dist/domain/managedReconstruction.js +19 -23
  378. package/dist/domain/managedRuntimeCorrelation.js +6 -9
  379. package/dist/domain/nativeApiBoundary.js +2 -7
  380. package/dist/domain/nativeInspection.js +0 -2
  381. package/dist/domain/nativeInvestigationGraph.js +351 -0
  382. package/dist/domain/nativeValueFlow.js +61 -0
  383. package/dist/domain/nodeRuntimeCharacterization.js +1 -5
  384. package/dist/domain/objcSwiftMetadata.js +254 -0
  385. package/dist/domain/peInspection.js +1 -1
  386. package/dist/domain/permissionPolicy.js +13 -0
  387. package/dist/domain/processCapture.js +76 -113
  388. package/dist/domain/processCaptureExample.js +68 -0
  389. package/dist/domain/processCaptureParsing.js +21 -0
  390. package/dist/domain/processCaptureReactiveSchema.js +68 -0
  391. package/dist/domain/processCaptureValidation.js +1 -7
  392. package/dist/domain/processComparison.js +3 -12
  393. package/dist/domain/processReactiveMatching.js +29 -50
  394. package/dist/domain/processReactiveRuntime.js +4 -8
  395. package/dist/domain/processReactiveScenario.js +28 -94
  396. package/dist/domain/processReactiveScenarioPreflight.js +5 -30
  397. package/dist/domain/processReactiveTransition.js +33 -18
  398. package/dist/domain/processScenario.js +56 -90
  399. package/dist/domain/processTraceComparison.js +0 -8
  400. package/dist/domain/processTraceEvaluation.js +14 -4
  401. package/dist/domain/processTraceSpecification.js +11 -17
  402. package/dist/domain/protocolCapture.js +3 -3
  403. package/dist/domain/reconstructionCoverage.js +62 -129
  404. package/dist/domain/reconstructionCoverageEvaluation.js +17 -17
  405. package/dist/domain/reconstructionObligationLedgerSchemas.js +45 -72
  406. package/dist/domain/reconstructionReadiness.js +1 -2
  407. package/dist/domain/reconstructionReadinessSchemas.js +36 -38
  408. package/dist/domain/reconstructionUnknowns.js +3 -3
  409. package/dist/domain/reconstructionVerification.js +13 -47
  410. package/dist/domain/reconstructionVerificationSchemas.js +50 -38
  411. package/dist/domain/referenceSourceGraph.js +53 -61
  412. package/dist/domain/referenceSourceImportParsing.js +1 -5
  413. package/dist/domain/replayMachine.js +19 -31
  414. package/dist/domain/replayMachineRun.js +15 -63
  415. package/dist/domain/replayMachineRuntime.js +41 -41
  416. package/dist/domain/replayMachineValues.js +84 -0
  417. package/dist/domain/residualUnknown.js +25 -30
  418. package/dist/domain/runtimeCharacterization.js +15 -16
  419. package/dist/domain/runtimeIdentification.js +48 -47
  420. package/dist/domain/sourceToBundleComparison.js +9 -85
  421. package/dist/domain/sourceToBundleComparisonSchemas.js +17 -42
  422. package/dist/domain/sourceToBundleSignals.js +4 -15
  423. package/dist/domain/staticRuntimeCorrelation.js +37 -49
  424. package/dist/domain/symbolAnalysis.js +10 -19
  425. package/dist/domain/unicodeCodePointOrder.js +12 -0
  426. package/dist/domain/webBundleAnalysis.js +70 -99
  427. package/dist/domain/webBundleAnalyzer.js +2 -4
  428. package/dist/domain/webBundleAnalyzerAst.js +0 -13
  429. package/dist/domain/webBundleAnalyzerInspection.js +26 -52
  430. package/dist/domain/webBundleAnalyzerResult.js +7 -24
  431. package/dist/domain/webCaptureDiff.js +33 -73
  432. package/dist/domain/webCaptureDiffSchemas.js +86 -0
  433. package/dist/domain/webContentArtifact.js +1 -10
  434. package/dist/domain/webMcpDiscovery.js +3 -14
  435. package/dist/domain/webScreenshot.js +58 -34
  436. package/dist/domain/zipPackageFormat.js +7 -0
  437. package/dist/dotnet/ManagedArtifactInspector.js +17 -50
  438. package/dist/dotnet/ManagedMemberInspector.js +27 -58
  439. package/dist/dotnet/ManagedMemberInspectorCore.js +14 -51
  440. package/dist/dotnet/ManagedMemberInstructionDecoder.js +2 -2
  441. package/dist/dotnet/ManagedMemberRows.js +16 -16
  442. package/dist/dotnet/ManagedMetadataHeaps.js +26 -8
  443. package/dist/dotnet/ManagedMetadataInventory.js +21 -30
  444. package/dist/dotnet/ManagedMetadataInventoryRows.js +57 -63
  445. package/dist/dotnet/ManagedMetadataLayout.js +3 -5
  446. package/dist/dotnet/ManagedMethodBodyReader.js +5 -30
  447. package/dist/dotnet/ManagedNativeBoundaryHelpers.js +19 -49
  448. package/dist/dotnet/ManagedNativeBoundaryInspector.js +13 -41
  449. package/dist/dotnet/ManagedPeReader.js +2 -2
  450. package/dist/dotnet/ManagedStaticProvider.js +13 -71
  451. package/dist/generatedMcpToolCatalog.js +1 -1
  452. package/dist/generatedPackageMetadata.js +1 -1
  453. package/dist/ghidra/GhidraAnalysisProfile.js +3 -8
  454. package/dist/ghidra/GhidraClient.js +4 -12
  455. package/dist/ghidra/GhidraClientWire.js +9 -5
  456. package/dist/ghidra/GhidraDefaults.js +0 -18
  457. package/dist/ghidra/GhidraDiagnostics.js +0 -2
  458. package/dist/ghidra/GhidraDoctor.js +16 -12
  459. package/dist/ghidra/GhidraFunctionValues.js +65 -108
  460. package/dist/ghidra/GhidraInstallation.js +98 -42
  461. package/dist/ghidra/GhidraInventoryValues.js +16 -85
  462. package/dist/ghidra/GhidraLauncher.js +0 -8
  463. package/dist/ghidra/GhidraProvider.js +15 -22
  464. package/dist/ghidra/GhidraProviderCapabilities.js +6 -47
  465. package/dist/ghidra/GhidraRequestQueue.js +6 -30
  466. package/dist/ghidra/GhidraResponseBuffer.js +1 -7
  467. package/dist/ghidra/GhidraSessionValues.js +0 -2
  468. package/dist/ghidra/GhidraTransport.js +4 -7
  469. package/dist/ghidra/protocol.js +2 -2
  470. package/dist/hopper/BridgeLauncher.js +112 -36
  471. package/dist/hopper/HopperAnalysisProfile.js +1 -1
  472. package/dist/hopper/HopperCleanup.js +6 -3
  473. package/dist/hopper/HopperClient.js +4 -7
  474. package/dist/hopper/HopperProcessDiagnostic.js +2 -2
  475. package/dist/hopper/HopperProvider.js +0 -16
  476. package/dist/hopper/HopperRequestQueue.js +21 -40
  477. package/dist/hopper/HopperResponseStream.js +1 -9
  478. package/dist/hopper/HopperSessionValues.js +3 -2
  479. package/dist/hopper/HopperTargetLease.js +119 -0
  480. package/dist/hopper/LinuxPrivateDisplayDiagnostic.js +24 -31
  481. package/dist/hopper/LinuxPrivateDisplayProbe.js +5 -16
  482. package/dist/hopper/protocol.js +6 -4
  483. package/dist/main/reload.js +0 -3
  484. package/dist/main/shutdown.js +1 -1
  485. package/dist/main/state.js +0 -9
  486. package/dist/main/transport.js +0 -5
  487. package/dist/mcpDoctor.js +25 -45
  488. package/dist/native/CommandRunner.js +18 -25
  489. package/dist/native/NativeMacOSProvider.js +13 -38
  490. package/dist/native/NativeMachoInspection.js +1 -1
  491. package/dist/process/BoundedFileBytes.js +17 -0
  492. package/dist/process/ExecFileOutput.js +11 -0
  493. package/dist/process/PendingOperations.js +8 -6
  494. package/dist/process/ProcessOwnership.js +3 -2
  495. package/dist/process/ProcessOwnershipObservation.js +0 -1
  496. package/dist/process/ProviderProcess.js +7 -28
  497. package/dist/reference/ReferenceSourceReader.js +8 -24
  498. package/dist/reference/ReferenceSourceReaderEntries.js +11 -39
  499. package/dist/reference/ReferenceSourceReaderFile.js +13 -31
  500. package/dist/reference/ReferenceSourceReaderPaths.js +3 -18
  501. package/dist/reference/ReferenceSourceReaderValidate.js +3 -6
  502. package/dist/replay/JavaScriptReplayWorker.js +3 -5
  503. package/dist/replay/LinuxJavaScriptReplayRunner.js +33 -29
  504. package/dist/replay/LinuxJavaScriptReplaySandbox.js +0 -19
  505. package/dist/replay/LinuxRuntimeClosure.js +1 -3
  506. package/dist/replay/ReplayOutcome.js +1 -3
  507. package/dist/replay/ReplayProcessLifecycle.js +32 -7
  508. package/dist/replay/ReplaySeccompFile.js +29 -0
  509. package/dist/replay/ReplayWorkerProtocol.js +0 -2
  510. package/dist/replay/SystemJavaScriptReplayHost.js +45 -74
  511. package/dist/server/ProcessCaptureElicitation.js +4 -8
  512. package/dist/server/createServer.js +6 -44
  513. package/dist/server/promptCompletion.js +37 -61
  514. package/dist/server/recordDerivedEvidence.js +1 -1
  515. package/dist/server/registerApplicationTools/characterization.js +4 -8
  516. package/dist/server/registerApplicationTools/compareExportShapes.js +5 -10
  517. package/dist/server/registerApplicationTools/compareSourceToBundle.js +6 -10
  518. package/dist/server/registerApplicationTools/compareVersions.js +5 -10
  519. package/dist/server/registerApplicationTools/controlledReplay.js +3 -5
  520. package/dist/server/registerApplicationTools/coverage.js +6 -71
  521. package/dist/server/registerApplicationTools/helpers.js +1 -13
  522. package/dist/server/registerApplicationTools/obligationLedger.js +3 -2
  523. package/dist/server/registerApplicationTools/traceFeature.js +5 -9
  524. package/dist/server/registerApplicationTools/traceSemantics.js +5 -8
  525. package/dist/server/registerApplicationTools.js +0 -2
  526. package/dist/server/registerArtifactComparisonTool.js +23 -27
  527. package/dist/server/registerBrowserScenarioTool.js +4 -4
  528. package/dist/server/registerBrowserTools.js +5 -8
  529. package/dist/server/registerBundleComparisonTool.js +5 -7
  530. package/dist/server/registerCloseLifecycleTool.js +2 -16
  531. package/dist/server/registerElectronTools.js +10 -29
  532. package/dist/server/registerEnhancedTools.js +10 -11
  533. package/dist/server/registerEvidenceTools.js +15 -22
  534. package/dist/server/registerFunctionComparisonTool.js +30 -25
  535. package/dist/server/registerInvestigationTools/helpers.js +3 -32
  536. package/dist/server/registerInvestigationTools.js +20 -116
  537. package/dist/server/registerJavaScriptRuntimeObservationTools.js +6 -4
  538. package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +15 -17
  539. package/dist/server/registerManagedWorkflowTools/evidence.js +19 -35
  540. package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +3 -8
  541. package/dist/server/registerManagedWorkflowTools/planManagedRuntimeCorrelation.js +3 -8
  542. package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +10 -14
  543. package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +9 -15
  544. package/dist/server/registerOfficialTools.js +1 -43
  545. package/dist/server/registerProcessComparisonTool.js +33 -23
  546. package/dist/server/registerPrompts.js +19 -17
  547. package/dist/server/registerSessionRecordTools.js +10 -156
  548. package/dist/server/registerSessionStatusTool.js +6 -69
  549. package/dist/server/registerSessionTools.js +10 -51
  550. package/dist/server/sessionAvailabilityPolicy.js +0 -2
  551. package/dist/server/sessionEvidence.js +9 -15
  552. package/dist/server/sessionToolPolicies.js +0 -8
  553. package/dist/server/toolResult.js +14 -50
  554. package/dist/serverIdentity.js +0 -20
  555. package/install.sh +1 -1
  556. package/package.json +11 -7
  557. package/scripts/electron-active-hook.cjs +23 -55
  558. package/scripts/hopper-demo-x11.py +13 -32
  559. package/skills/reverse-engineer-anything/SKILL.md +47 -12
  560. package/skills/reverse-engineer-anything/references/evidence-workflows.md +6 -4
  561. package/skills/reverse-engineer-anything/references/javascript-applications.md +13 -13
  562. package/skills/reverse-engineer-anything/references/native-and-artifacts.md +12 -8
  563. package/dist/application/ApplicationWorkflowEvidenceResolver.js +0 -188
  564. package/dist/application/BoundedJsonFiles.js +0 -86
  565. package/dist/application/CrossVersionInventory.js +0 -129
  566. package/dist/application/CrossVersionInvestigation.js +0 -301
  567. package/dist/application/CrossVersionInvestigationCollections.js +0 -23
  568. package/dist/application/CrossVersionInvestigationEvidence.js +0 -64
  569. package/dist/application/CrossVersionInvestigationReplay.js +0 -170
  570. package/dist/application/DeferredFileAuthorization.js +0 -61
  571. package/dist/application/DoctorProjection.js +0 -43
  572. package/dist/application/EnhancedToolPagination.js +0 -22
  573. package/dist/application/EvidenceReferenceResolver.js +0 -26
  574. package/dist/application/InvestigationWorkspaceStore.js +0 -204
  575. package/dist/application/ProcessPairedExperiment.js +0 -72
  576. package/dist/application/ReconstructionCoverageWorkspaceStore.js +0 -31
  577. package/dist/application/ReconstructionReadinessService.js +0 -48
  578. package/dist/cliInvestigationCommands.js +0 -173
  579. package/dist/domain/boundedCartesianProjection.js +0 -15
  580. package/dist/domain/investigationWorkspace.js +0 -347
  581. package/dist/domain/jsonLimits.js +0 -26
  582. package/dist/domain/knownPageCoverage.js +0 -29
  583. package/dist/domain/processPairedExperiment.js +0 -128
  584. package/dist/server/javascriptApplicationResult.js +0 -106
  585. package/dist/server/permissionFailure.js +0 -12
  586. package/dist/server/registerApplicationTools/readiness.js +0 -50
  587. package/dist/server/registerEvidenceResources.js +0 -315
  588. package/dist/server/registerJavaScriptApplicationGraphResource.js +0 -65
  589. package/dist/server/registerReconstructionObligationLedgerResource.js +0 -32
  590. package/dist/server/registerReconstructionReadinessResource.js +0 -32
@@ -21,29 +21,53 @@ const inspectIpcCall = (node, context) => {
21
21
  const channel = channelValue.status === "literal" && typeof channelValue.value === "string"
22
22
  ? channelValue.value
23
23
  : null;
24
- const channelExpression = channel === null
25
- ? channelValue.status === "dynamic"
26
- ? channelValue.expression
27
- : boundedExpression(context.source, channelNode)
28
- : null;
29
- const hasHandler = descriptor.mode === "listen" || descriptor.mode === "handle";
30
- const handlerNode = hasHandler ? argumentNode(node.arguments[1]) : undefined;
24
+ const channelReference = channel === null
25
+ ? {
26
+ channel: null,
27
+ channel_expression: channelValue.status === "dynamic"
28
+ ? channelValue.expression
29
+ : boundedExpression(context.source, channelNode),
30
+ }
31
+ : { channel, channel_expression: null };
32
+ const handlerNode = descriptor.mode === "listen" || descriptor.mode === "handle"
33
+ ? argumentNode(node.arguments[1])
34
+ : undefined;
35
+ const findingState = descriptor.mode === "send"
36
+ ? {
37
+ ...descriptor,
38
+ handler_kind: null,
39
+ handler_location: null,
40
+ }
41
+ : descriptor.mode === "invoke"
42
+ ? {
43
+ ...descriptor,
44
+ handler_kind: null,
45
+ handler_location: null,
46
+ }
47
+ : handlerNode === undefined
48
+ ? {
49
+ ...descriptor,
50
+ handler_kind: "missing",
51
+ handler_location: null,
52
+ }
53
+ : {
54
+ ...descriptor,
55
+ handler_kind: handlerKind(handlerNode),
56
+ handler_location: range(handlerNode),
57
+ };
31
58
  if (channel === null)
32
59
  context.accumulator.unknownFindings += 1;
33
- if (hasHandler && handlerNode === undefined)
60
+ if (findingState.handler_kind === "missing")
34
61
  context.accumulator.unknownFindings += 1;
35
62
  const finding = {
36
- ...descriptor,
37
- channel,
38
- channel_expression: channelExpression,
39
- handler_kind: hasHandler ? handlerKind(handlerNode) : null,
40
- handler_location: handlerNode === undefined ? null : range(handlerNode),
63
+ ...findingState,
64
+ ...channelReference,
41
65
  module_key: null,
42
66
  location: range(node),
43
67
  };
44
68
  addLocatedFinding(context, {
45
69
  collection: context.accumulator.ipc,
46
- key: `electron-ipc\0${descriptor.side}\0${descriptor.operation}\0${channel ?? channelExpression ?? "[missing]"}`,
70
+ key: `electron-ipc\0${descriptor.side}\0${descriptor.operation}\0${channelReference.channel ?? channelReference.channel_expression}`,
47
71
  node,
48
72
  value: finding,
49
73
  });
@@ -1,7 +1,6 @@
1
1
  import * as t from "@babel/types";
2
2
  import { addLocatedFinding } from "./javascriptStaticAnalysisFindings.js";
3
3
  import { argumentNode, calleeName, compareCodePoints, propertyName, range, stringValue, } from "./javascriptStaticAnalysisHelpers.js";
4
- const MAX_NATIVE_MEMBERS = 64;
5
4
  /** Inspect JavaScript-side imports and re-exports of native .node addons. */
6
5
  export const inspectElectronNativeNode = (node, context) => {
7
6
  if (t.isImportDeclaration(node))
@@ -91,12 +90,7 @@ const addBinding = (input) => {
91
90
  const unique = [
92
91
  ...new Set(input.members.filter((member) => member !== "")),
93
92
  ].sort(compareCodePoints);
94
- const members = (unique.length === 0 ? ["*"] : unique).slice(0, MAX_NATIVE_MEMBERS);
95
- const omitted = Math.max(0, unique.length - MAX_NATIVE_MEMBERS);
96
- if (omitted > 0) {
97
- context.accumulator.structuralTruncation = true;
98
- context.accumulator.droppedFindings += omitted;
99
- }
93
+ const members = unique.length === 0 ? ["*"] : unique;
100
94
  addLocatedFinding(context, {
101
95
  collection: context.accumulator.nativeAddonBindings,
102
96
  key: `native-addon-binding\0${kind}\0${specifier}\0${members.join("\0")}`,
@@ -105,7 +99,6 @@ const addBinding = (input) => {
105
99
  specifier,
106
100
  binding_kind: kind,
107
101
  members,
108
- members_truncated: omitted > 0,
109
102
  module_key: null,
110
103
  location: range(node),
111
104
  },
@@ -1,7 +1,6 @@
1
1
  import * as t from "@babel/types";
2
2
  import { compareCodePoints, propertyName, sourceSlice, } from "./javascriptStaticAnalysisHelpers.js";
3
- const MAX_EXPRESSION_CHARACTERS = 4_096;
4
- /** Preserve one literal value or the exact bounded inert expression. */
3
+ /** Preserve one literal value or the exact inert expression. */
5
4
  export const electronStaticValue = (source, node) => {
6
5
  const literal = literalValue(node);
7
6
  return literal.found
@@ -12,17 +11,16 @@ export const electronStaticValue = (source, node) => {
12
11
  expression: boundedExpression(source, node),
13
12
  };
14
13
  };
15
- /** Return an actionable bounded expression without evaluating it. */
14
+ /** Return an actionable expression without evaluating it. */
16
15
  export const boundedExpression = (source, node) => {
17
16
  if (node === null || node === undefined)
18
17
  return "[missing-expression]";
19
18
  const expression = sourceSlice(source, node).trim();
20
- return (expression === "" ? `[${node.type}]` : expression).slice(0, MAX_EXPRESSION_CHARACTERS);
19
+ return expression === "" ? `[${node.type}]` : expression;
21
20
  };
22
21
  /** Read one named object property without following spreads or bindings. */
23
22
  export const objectProperty = (object, name) => object.properties.find((property) => t.isObjectProperty(property) && propertyName(property.key) === name);
24
- /** Classify a handler argument while retaining its exact source range. */
25
- export const handlerKind = (node) => {
23
+ export function handlerKind(node) {
26
24
  if (node === null || node === undefined)
27
25
  return "missing";
28
26
  if (t.isArrowFunctionExpression(node) ||
@@ -34,22 +32,20 @@ export const handlerKind = (node) => {
34
32
  if (t.isMemberExpression(node) || t.isOptionalMemberExpression(node))
35
33
  return "member-expression";
36
34
  return "dynamic-expression";
37
- };
38
- /** Collect bounded dotted keys from one literal contextBridge API object. */
39
- export const collectContextBridgeMembers = (node, maximum = 128) => {
35
+ }
36
+ /** Collect statically visible dotted keys from one literal contextBridge API object. */
37
+ export const collectContextBridgeMembers = (node) => {
40
38
  if (node === null || node === undefined)
41
39
  return {
42
40
  status: "missing",
43
41
  members: [],
44
42
  unknown: 0,
45
- omitted: 0,
46
43
  };
47
44
  if (!t.isObjectExpression(node))
48
45
  return {
49
46
  status: "dynamic",
50
47
  members: [],
51
48
  unknown: 1,
52
- omitted: 0,
53
49
  };
54
50
  const state = {
55
51
  members: [],
@@ -59,9 +55,8 @@ export const collectContextBridgeMembers = (node, maximum = 128) => {
59
55
  const members = [...new Set(state.members)].sort(compareCodePoints);
60
56
  return {
61
57
  status: "object-literal",
62
- members: members.slice(0, maximum),
58
+ members,
63
59
  unknown: state.unknown,
64
- omitted: Math.max(0, members.length - maximum),
65
60
  };
66
61
  };
67
62
  const collectMembersAt = (object, prefix, depth, state) => {
@@ -79,7 +74,7 @@ const collectMembersAt = (object, prefix, depth, state) => {
79
74
  state.unknown += 1;
80
75
  continue;
81
76
  }
82
- const path = (prefix === "" ? name : `${prefix}.${name}`).slice(0, MAX_EXPRESSION_CHARACTERS);
77
+ const path = prefix === "" ? name : `${prefix}.${name}`;
83
78
  state.members.push(path);
84
79
  if (t.isObjectProperty(property) && t.isObjectExpression(property.value))
85
80
  collectMembersAt(property.value, path, depth + 1, state);
@@ -95,9 +90,7 @@ const literalValue = (node) => {
95
90
  if (t.isTemplateLiteral(node) && node.expressions.length === 0)
96
91
  return {
97
92
  found: true,
98
- value: (node.quasis[0]?.value.cooked ??
99
- node.quasis[0]?.value.raw ??
100
- "").slice(0, MAX_EXPRESSION_CHARACTERS),
93
+ value: node.quasis[0]?.value.cooked ?? node.quasis[0]?.value.raw ?? "",
101
94
  };
102
95
  if (t.isUnaryExpression(node, { operator: "-" }) &&
103
96
  t.isNumericLiteral(node.argument))
@@ -15,9 +15,7 @@ const ANALYSIS_ERROR_TAGS = [
15
15
  "ArtifactOperationError",
16
16
  "ProcessCaptureError",
17
17
  "EvidenceIntegrityError",
18
- "EvidenceLimitError",
19
18
  "EvidenceFileError",
20
- "InvestigationWorkspaceError",
21
19
  "UnknownRegistryError",
22
20
  "HopperTimeoutError",
23
21
  "HopperCancelledError",
@@ -109,20 +107,9 @@ export class ProviderSelectionError extends AnalysisError {
109
107
  candidateIds;
110
108
  rejections;
111
109
  userMessage;
112
- constructor(input) {
113
- const legacy = typeof input === "string";
114
- const options = legacy
115
- ? {
116
- operation: input,
117
- reason: "provider_unavailable",
118
- requestedProviderId: "auto",
119
- candidateIds: [],
120
- }
121
- : input;
110
+ constructor(options) {
122
111
  const operation = options.operation ?? "open_binary";
123
- super(legacy
124
- ? `No configured provider can execute ${operation}`
125
- : providerSelectionDiagnostic(options));
112
+ super(providerSelectionDiagnostic(options));
126
113
  this.operation = operation;
127
114
  this.reason = options.reason;
128
115
  this.requestedProviderId = options.requestedProviderId;
@@ -214,17 +201,6 @@ export class EvidenceReferenceError extends EvidenceIntegrityError {
214
201
  this.actual = actual;
215
202
  }
216
203
  }
217
- /** A bounded evidence ledger cannot accept more records or serialized bytes. */
218
- export class EvidenceLimitError extends AnalysisError {
219
- limit;
220
- maximum;
221
- _tag = "EvidenceLimitError";
222
- constructor(limit, maximum) {
223
- super(`Evidence ledger ${limit} limit exceeded (${String(maximum)})`);
224
- this.limit = limit;
225
- this.maximum = maximum;
226
- }
227
- }
228
204
  /** Evidence bundle filesystem access failed within the configured policy. */
229
205
  export class EvidenceFileError extends AnalysisError {
230
206
  operation;
@@ -236,17 +212,6 @@ export class EvidenceFileError extends AnalysisError {
236
212
  this.reason = reason;
237
213
  }
238
214
  }
239
- /** Persistent investigation workspace access or CAS validation failed. */
240
- export class InvestigationWorkspaceError extends AnalysisError {
241
- operation;
242
- reason;
243
- _tag = "InvestigationWorkspaceError";
244
- constructor(operation, reason, options) {
245
- super(`Investigation workspace ${operation} failed: ${reason}`, options);
246
- this.operation = operation;
247
- this.reason = reason;
248
- }
249
- }
250
215
  /** Residual-unknown mutation failed a lifecycle, reference, or CAS invariant. */
251
216
  export class UnknownRegistryError extends AnalysisError {
252
217
  reason;
@@ -259,10 +224,16 @@ export class UnknownRegistryError extends AnalysisError {
259
224
  /** Hopper did not respond within the configured operation deadline. */
260
225
  export class HopperTimeoutError extends HopperError {
261
226
  timeoutMs;
227
+ operation;
228
+ requestId;
229
+ providerState;
262
230
  _tag = "HopperTimeoutError";
263
- constructor(timeoutMs) {
264
- super(`Hopper did not respond within ${String(timeoutMs)}ms`);
231
+ constructor(timeoutMs, operation, requestId, providerState = "not_started") {
232
+ super(`Hopper ${operation === undefined ? "startup" : operation} timed out after ${String(timeoutMs)}ms`);
265
233
  this.timeoutMs = timeoutMs;
234
+ this.operation = operation;
235
+ this.requestId = requestId;
236
+ this.providerState = providerState;
266
237
  }
267
238
  }
268
239
  /** The caller cancelled a Hopper operation before it completed. */
@@ -276,30 +247,37 @@ export class HopperCancelledError extends HopperError {
276
247
  export class HopperProtocolError extends HopperError {
277
248
  _tag = "HopperProtocolError";
278
249
  }
279
- /** Hopper's JSON-RPC endpoint returned an expected remote error response. */
280
250
  export class HopperRemoteError extends HopperError {
281
251
  code;
282
252
  safeMessage;
283
- diagnosticType;
284
253
  _tag = "HopperRemoteError";
285
- constructor(code, safeMessage, diagnosticType = "remote") {
254
+ diagnosticType;
255
+ operation;
256
+ requestId;
257
+ constructor(code, safeMessage, context = {}) {
286
258
  super(`Hopper request failed (${String(code)}): ${safeMessage}`);
287
259
  this.code = code;
288
260
  this.safeMessage = safeMessage;
289
- this.diagnosticType = diagnosticType;
261
+ this.diagnosticType = context.diagnosticType ?? "remote";
262
+ this.operation = context.operation;
263
+ this.requestId = context.requestId;
290
264
  }
291
265
  }
292
266
  /** The owned Hopper bridge stopped before its client was closed. */
293
267
  export class HopperProcessError extends HopperError {
294
268
  exitCode;
295
269
  diagnostic;
270
+ operation;
271
+ requestId;
296
272
  _tag = "HopperProcessError";
297
273
  failureCode;
298
274
  userMessage;
299
- constructor(exitCode, diagnostic) {
275
+ constructor(exitCode, diagnostic, operation, requestId) {
300
276
  super(`Hopper bridge stopped unexpectedly with code ${String(exitCode)}`);
301
277
  this.exitCode = exitCode;
302
278
  this.diagnostic = diagnostic;
279
+ this.operation = operation;
280
+ this.requestId = requestId;
303
281
  const failure = hopperStartupFailure(exitCode);
304
282
  this.failureCode = failure?.code;
305
283
  this.userMessage = failure?.message;
@@ -308,8 +286,12 @@ export class HopperProcessError extends HopperError {
308
286
  /** Hopper or the repository bridge could not be started. */
309
287
  export class HopperStartError extends HopperError {
310
288
  _tag = "HopperStartError";
289
+ userMessage;
290
+ ownerRunId;
311
291
  constructor(options) {
312
292
  super("Hopper application bridge could not be started", options);
293
+ this.userMessage = options?.userMessage;
294
+ this.ownerRunId = options?.ownerRunId;
313
295
  }
314
296
  }
315
297
  /** Runtime configuration could not be parsed safely. */
@@ -338,16 +320,13 @@ export class PermissionRequiredError extends AnalysisError {
338
320
  requested;
339
321
  missing;
340
322
  ceiling;
341
- elicitationSupported;
342
- restartRequired;
343
- constructor(...args) {
344
- const [requested, missing, ceiling, elicitationSupported, restartRequired] = args;
345
- super(`Permission required for ${requested.capability}`);
346
- this.requested = requested;
347
- this.missing = missing;
348
- this.ceiling = ceiling;
349
- this.elicitationSupported = elicitationSupported;
350
- this.restartRequired = restartRequired;
323
+ remediation;
324
+ constructor(context) {
325
+ super(`Permission required for ${context.requested.capability}`);
326
+ this.requested = context.requested;
327
+ this.missing = context.missing;
328
+ this.ceiling = context.ceiling;
329
+ this.remediation = context.remediation;
351
330
  }
352
331
  }
353
332
  /** Approved replay commitment no longer matches the immediately rebuilt plan. */
@@ -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. */
@@ -178,10 +178,10 @@ export function getDescendants(processes, rootPid) {
178
178
  const visited = new Set();
179
179
  const result = [];
180
180
  const queue = [rootPid];
181
- while (queue.length > 0) {
182
- const pid = queue.shift();
181
+ for (let head = 0; head < queue.length; head += 1) {
182
+ const pid = queue[head];
183
183
  if (pid === undefined)
184
- break;
184
+ continue;
185
185
  if (visited.has(pid))
186
186
  continue;
187
187
  visited.add(pid);
@@ -204,14 +204,22 @@ export function containsProcess(processes, pid) {
204
204
  /** Get the maximum tree depth from the root. */
205
205
  export function maxTreeDepth(processes, rootPid) {
206
206
  const byPid = new Map(processes.map((p) => [p.pid, p]));
207
- function depth(pid, visited) {
208
- if (visited.has(pid))
209
- return 0;
210
- visited.add(pid);
211
- 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);
212
216
  if (!node || node.children.length === 0)
213
- return 0;
214
- 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 });
215
223
  }
216
- return depth(rootPid, new Set());
224
+ return maximumDepth;
217
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}`),
@@ -124,19 +124,12 @@ export const stringAndNameProjection = (snapshot) => {
124
124
  };
125
125
  export const sorted = (values) => [...values].sort((left, right) => canonicalJson(left).localeCompare(canonicalJson(right)));
126
126
  export const combineCoverage = (left, right) => {
127
- const base = {
127
+ return {
128
128
  items: [...left.items, ...right.items],
129
- total: left.total === null || right.total === null
130
- ? null
131
- : left.total + right.total,
129
+ total: left.total + right.total,
130
+ complete: true,
131
+ truncated: false,
132
132
  };
133
- return left.complete && right.complete
134
- ? { ...base, complete: true, truncated: false }
135
- : {
136
- ...base,
137
- complete: false,
138
- truncated: left.truncated || right.truncated,
139
- };
140
133
  };
141
134
  export const project = (collection, mapper) => collection.items.map(mapper);
142
135
  export const isAutoName = (name) => /^(?:sub_[0-9a-f]+|fcn\.)/iu.test(name);