rea-agents 3.1.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 (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
@@ -1,22 +0,0 @@
1
- import { AnalysisOutputError } from "../domain/errors.js";
2
- import { parseAddressedPage } from "../domain/hopperValues.js";
3
- import { err, ok } from "../domain/result.js";
4
- /** Read all addressed entries while enforcing advancing provider pagination. */
5
- export const readAllAddressed = async (input) => {
6
- const entries = [];
7
- let offset = 0;
8
- while (true) {
9
- const result = await input.call(input.tool, { offset, limit: 500 }, input.signal);
10
- if (!result.ok)
11
- return result;
12
- const page = parseAddressedPage(result.value);
13
- if (!page.ok)
14
- return page;
15
- entries.push(...page.value.items);
16
- if (!page.value.hasMore || page.value.nextOffset === null)
17
- return ok(entries);
18
- if (page.value.nextOffset <= offset)
19
- return err(new AnalysisOutputError(input.tool, "provider returned a non-advancing pagination offset"));
20
- offset = page.value.nextOffset;
21
- }
22
- };
@@ -1,26 +0,0 @@
1
- import { EvidenceReferenceError } from "../domain/errors.js";
2
- import { err, ok } from "../domain/result.js";
3
- /** Resolve IDs without accepting the digest-shaped identifier as proof itself. */
4
- export const resolveEvidenceReferences = (lookup, evidenceIds, expected) => {
5
- const records = [];
6
- for (const evidenceId of evidenceIds) {
7
- const record = lookup?.(evidenceId);
8
- if (record === undefined)
9
- return err(new EvidenceReferenceError(evidenceId, "missing", expectationDescription(expected), null));
10
- if (expected !== undefined) {
11
- const operations = expected.filter(({ operation }) => operation === record.operation);
12
- if (operations.length === 0)
13
- return err(new EvidenceReferenceError(evidenceId, "wrong_operation", unique(expected.map(({ operation }) => operation)).join(" | "), record.operation));
14
- if (!operations.some(({ predicate }) => predicate === record.predicate_type))
15
- return err(new EvidenceReferenceError(evidenceId, "wrong_predicate", unique(operations.map(({ predicate }) => predicate)).join(" | "), record.predicate_type));
16
- }
17
- records.push(record);
18
- }
19
- return ok(records);
20
- };
21
- const expectationDescription = (expected) => expected === undefined
22
- ? "Evidence in the current authority"
23
- : expected
24
- .map(({ operation, predicate }) => `${operation}:${predicate}`)
25
- .join(" | ");
26
- const unique = (values) => [...new Set(values)];
@@ -1,204 +0,0 @@
1
- import { lstat, open, readFile, realpath, unlink, } from "node:fs/promises";
2
- import { basename, dirname, isAbsolute, relative, resolve } from "node:path";
3
- import writeFileAtomic from "write-file-atomic";
4
- import { isJsonWithinLimits } from "../domain/jsonLimits.js";
5
- import { InvestigationWorkspaceError } from "../domain/errors.js";
6
- import { parseInvestigationWorkspace, serializeInvestigationWorkspace, } from "../domain/investigationWorkspace.js";
7
- import { err, ok } from "../domain/result.js";
8
- const investigationWorkspaceCodec = {
9
- parse: parseInvestigationWorkspace,
10
- serialize: serializeInvestigationWorkspace,
11
- validateNext: validateNextRevision,
12
- };
13
- /** Read a validated workspace, returning null only when it does not exist. */
14
- export const readInvestigationWorkspace = async (path, policy) => readRevisionedWorkspace(path, policy, investigationWorkspaceCodec);
15
- /** Read one root-confined, owner-only revisioned workspace document. */
16
- export const readRevisionedWorkspace = async (path, policy, codec) => {
17
- if (policy.roots.length === 0)
18
- return err(new InvestigationWorkspaceError("read", "disabled"));
19
- try {
20
- const destination = await resolveDestination(path, policy.roots);
21
- if (destination === null)
22
- return err(new InvestigationWorkspaceError("read", "outside-root"));
23
- return await readWorkspaceFile(destination, policy, codec);
24
- }
25
- catch (cause) {
26
- return err(new InvestigationWorkspaceError("read", "io", { cause }));
27
- }
28
- };
29
- /** Atomically append one CAS-linked workspace revision under an exclusive lock. */
30
- export const writeInvestigationWorkspace = async (workspace, path, expectedRevision, policy) => writeRevisionedWorkspace(path, policy, {
31
- document: workspace,
32
- expectedRevision,
33
- codec: investigationWorkspaceCodec,
34
- });
35
- /** Atomically append one validated CAS-linked revision under an exclusive lock. */
36
- export const writeRevisionedWorkspace = async (path, policy, input) => {
37
- const { document, expectedRevision, codec } = input;
38
- if (policy.roots.length === 0)
39
- return err(new InvestigationWorkspaceError("update", "disabled"));
40
- let encoded;
41
- try {
42
- encoded = codec.serialize(document);
43
- }
44
- catch (cause) {
45
- return err(new InvestigationWorkspaceError("update", "integrity", { cause }));
46
- }
47
- const bytes = Buffer.byteLength(encoded, "utf8");
48
- if (bytes > policy.maxBytes)
49
- return err(new InvestigationWorkspaceError("update", "too-large"));
50
- let lock;
51
- try {
52
- const destination = await resolveDestination(path, policy.roots);
53
- if (destination === null)
54
- return err(new InvestigationWorkspaceError("update", "outside-root"));
55
- const acquired = await acquireLock(destination);
56
- if (!acquired.ok)
57
- return acquired;
58
- lock = acquired.value;
59
- const current = await readWorkspaceFile(destination, policy, codec);
60
- if (!current.ok)
61
- return current;
62
- const checked = codec.validateNext(current.value, document, expectedRevision);
63
- if (!checked.ok)
64
- return checked;
65
- await writeFileAtomic(destination, encoded, {
66
- encoding: "utf8",
67
- mode: 0o600,
68
- fsync: true,
69
- });
70
- return ok({ path: resolve(path), bytes });
71
- }
72
- catch (cause) {
73
- return err(new InvestigationWorkspaceError("update", "io", { cause }));
74
- }
75
- finally {
76
- if (lock !== undefined)
77
- await releaseLock(lock);
78
- }
79
- };
80
- const resolveDestination = async (path, roots) => {
81
- const requested = resolve(path);
82
- const canonicalParent = await realpath(dirname(requested));
83
- const destination = resolve(canonicalParent, basename(requested));
84
- for (const configuredRoot of roots) {
85
- const root = await realpath(resolve(configuredRoot));
86
- const relation = relative(root, destination);
87
- if (relation === "" ||
88
- (!relation.startsWith("..") && !isAbsolute(relation)))
89
- return destination;
90
- }
91
- return null;
92
- };
93
- const readWorkspaceFile = async (destination, policy, codec) => {
94
- const stats = await lstat(destination).catch((cause) => {
95
- if (isFileNotFound(cause))
96
- return undefined;
97
- throw cause;
98
- });
99
- if (stats === undefined)
100
- return ok(null);
101
- if (!stats.isFile() || stats.isSymbolicLink())
102
- return err(new InvestigationWorkspaceError("read", "not-file"));
103
- if (stats.size > policy.maxBytes)
104
- return err(new InvestigationWorkspaceError("read", "too-large"));
105
- const encoded = await readFile(destination);
106
- if (encoded.byteLength > policy.maxBytes)
107
- return err(new InvestigationWorkspaceError("read", "too-large"));
108
- let decoded;
109
- try {
110
- decoded = JSON.parse(encoded.toString("utf8"));
111
- }
112
- catch (cause) {
113
- return err(new InvestigationWorkspaceError("read", "invalid-json", { cause }));
114
- }
115
- if (!isJsonWithinLimits(decoded, policy))
116
- return err(new InvestigationWorkspaceError("read", "too-large"));
117
- try {
118
- return ok(codec.parse(decoded));
119
- }
120
- catch (cause) {
121
- return err(new InvestigationWorkspaceError("read", "integrity", { cause }));
122
- }
123
- };
124
- const acquireLock = async (destination) => {
125
- const path = `${destination}.lock`;
126
- try {
127
- return ok(await createLock(path));
128
- }
129
- catch (cause) {
130
- if (isAlreadyExists(cause) && (await removeStaleLock(path))) {
131
- try {
132
- return ok(await createLock(path));
133
- }
134
- catch (retryCause) {
135
- return err(new InvestigationWorkspaceError("update", isAlreadyExists(retryCause) ? "locked" : "io", { cause: retryCause }));
136
- }
137
- }
138
- return err(new InvestigationWorkspaceError("update", isAlreadyExists(cause) ? "locked" : "io", { cause }));
139
- }
140
- };
141
- const createLock = async (path) => {
142
- const handle = await open(path, "wx", 0o600);
143
- try {
144
- await handle.writeFile(`${String(process.pid)}\n`, "utf8");
145
- await handle.sync();
146
- return { path, handle };
147
- }
148
- catch (cause) {
149
- await handle.close().catch(() => undefined);
150
- await unlink(path).catch(() => undefined);
151
- throw cause;
152
- }
153
- };
154
- const removeStaleLock = async (path) => {
155
- try {
156
- const stats = await lstat(path);
157
- if (!stats.isFile() || stats.isSymbolicLink() || stats.size > 32)
158
- return false;
159
- const encoded = (await readFile(path, "utf8")).trim();
160
- if (!/^[1-9][0-9]{0,9}$/u.test(encoded))
161
- return false;
162
- const pid = Number(encoded);
163
- if (processIsAlive(pid))
164
- return false;
165
- await unlink(path);
166
- return true;
167
- }
168
- catch {
169
- return false;
170
- }
171
- };
172
- const processIsAlive = (pid) => {
173
- try {
174
- process.kill(pid, 0);
175
- return true;
176
- }
177
- catch (cause) {
178
- return errorCode(cause) !== "ESRCH";
179
- }
180
- };
181
- const releaseLock = async (lock) => {
182
- await lock.handle.close().catch(() => undefined);
183
- await unlink(lock.path).catch(() => undefined);
184
- };
185
- function validateNextRevision(current, next, expectedRevision) {
186
- if ((current?.revision ?? null) !== expectedRevision)
187
- return err(new InvestigationWorkspaceError("update", "revision-conflict"));
188
- if (current === null) {
189
- return next.revision === 1 && next.previous_revision_digest === null
190
- ? ok(null)
191
- : err(new InvestigationWorkspaceError("update", "revision-conflict"));
192
- }
193
- if (current.name !== next.name || current.workspace_id !== next.workspace_id)
194
- return err(new InvestigationWorkspaceError("update", "name-conflict"));
195
- return next.revision === current.revision + 1 &&
196
- next.previous_revision_digest === current.revision_digest
197
- ? ok(null)
198
- : err(new InvestigationWorkspaceError("update", "revision-conflict"));
199
- }
200
- const isFileNotFound = (cause) => errorCode(cause) === "ENOENT";
201
- const isAlreadyExists = (cause) => errorCode(cause) === "EEXIST";
202
- const errorCode = (cause) => typeof cause === "object" && cause !== null && "code" in cause
203
- ? cause.code
204
- : undefined;
@@ -1,72 +0,0 @@
1
- import { processCaptureCancelled, } from "./ProcessCaptureError.js";
2
- import { captureProcessScenario } from "./ProcessHarness.js";
3
- import { compareProcessCaptures } from "../domain/processComparison.js";
4
- import { PROCESS_COMPARISON_DIMENSIONS } from "../domain/processComparison.js";
5
- import { analyzeProcessRepeatability, bindProcessScenario, } from "../domain/processPairedExperiment.js";
6
- import { err, ok } from "../domain/result.js";
7
- const productionCapturePort = {
8
- capture: captureProcessScenario,
9
- };
10
- const captureRepeats = async (input) => {
11
- const captures = [];
12
- for (let index = 0; index < input.repeatCount; index += 1) {
13
- if (input.signal?.aborted === true)
14
- return err(processCaptureCancelled());
15
- const capture = await input.port.capture(input.scenario, input.policy, input.signal);
16
- if (!capture.ok)
17
- return err(capture.error);
18
- captures.push(capture.value);
19
- }
20
- return ok(captures);
21
- };
22
- /** Execute repeatability-first authority/candidate captures under one contract. */
23
- export const runPairedProcessExperiment = async (experiment, policy, options = {}) => {
24
- const port = options.capturePort ?? productionCapturePort;
25
- const authorityScenario = bindProcessScenario(experiment.shared_scenario, experiment.authority);
26
- const candidateScenario = bindProcessScenario(experiment.shared_scenario, experiment.candidate);
27
- const authorityRuns = await captureRepeats({
28
- scenario: authorityScenario,
29
- repeatCount: experiment.repeat_count,
30
- policy,
31
- port,
32
- ...(options.signal === undefined ? {} : { signal: options.signal }),
33
- });
34
- if (!authorityRuns.ok)
35
- return authorityRuns;
36
- const candidateRuns = await captureRepeats({
37
- scenario: candidateScenario,
38
- repeatCount: experiment.repeat_count,
39
- policy,
40
- port,
41
- ...(options.signal === undefined ? {} : { signal: options.signal }),
42
- });
43
- if (!candidateRuns.ok)
44
- return candidateRuns;
45
- const authorityRepeatability = analyzeProcessRepeatability(authorityRuns.value, experiment.required_dimensions);
46
- const candidateRepeatability = analyzeProcessRepeatability(candidateRuns.value, experiment.required_dimensions);
47
- const stable = authorityRepeatability.stable && candidateRepeatability.stable;
48
- const allDimensionsRequired = PROCESS_COMPARISON_DIMENSIONS.every((dimension) => experiment.required_dimensions.includes(dimension));
49
- const authorityLatest = authorityRuns.value.at(-1);
50
- const candidateLatest = candidateRuns.value.at(-1);
51
- const crossSide = stable &&
52
- allDimensionsRequired &&
53
- authorityLatest !== undefined &&
54
- candidateLatest !== undefined
55
- ? compareProcessCaptures(authorityLatest, candidateLatest, {
56
- maxCaptureAgeMs: experiment.freshness_policy.max_capture_age_ms,
57
- ...(options.now === undefined ? {} : { now: options.now }),
58
- })
59
- : null;
60
- return ok({
61
- authority_runs: authorityRuns.value,
62
- candidate_runs: candidateRuns.value,
63
- authority_repeatability: authorityRepeatability,
64
- candidate_repeatability: candidateRepeatability,
65
- cross_side: crossSide,
66
- cross_side_blocked_reason: crossSide !== null
67
- ? null
68
- : !allDimensionsRequired
69
- ? "Cross-side comparison is blocked until every returned dimension is required and repeatable."
70
- : "Cross-side comparison is blocked because a required same-side dimension is unstable.",
71
- });
72
- };
@@ -1,31 +0,0 @@
1
- import { InvestigationWorkspaceError } from "../domain/errors.js";
2
- import { parseReconstructionCoverageWorkspace, serializeReconstructionCoverageWorkspace, } from "../domain/reconstructionCoverage.js";
3
- import { err, ok } from "../domain/result.js";
4
- import { readRevisionedWorkspace, writeRevisionedWorkspace, } from "./InvestigationWorkspaceStore.js";
5
- const codec = {
6
- parse: parseReconstructionCoverageWorkspace,
7
- serialize: serializeReconstructionCoverageWorkspace,
8
- validateNext: (current, next, expectedRevision) => {
9
- if ((current?.revision ?? null) !== expectedRevision)
10
- return err(new InvestigationWorkspaceError("update", "revision-conflict"));
11
- if (current === null)
12
- return next.revision === 1 && next.previous_revision_sha256 === null
13
- ? ok(null)
14
- : err(new InvestigationWorkspaceError("update", "revision-conflict"));
15
- if (current.name !== next.name ||
16
- current.workspace_id !== next.workspace_id)
17
- return err(new InvestigationWorkspaceError("update", "name-conflict"));
18
- return next.revision === current.revision + 1 &&
19
- next.previous_revision_sha256 === current.revision_sha256
20
- ? ok(null)
21
- : err(new InvestigationWorkspaceError("update", "revision-conflict"));
22
- },
23
- };
24
- /** Read a validated reconstruction coverage workspace revision. */
25
- export const readReconstructionCoverageWorkspace = (path, policy) => readRevisionedWorkspace(path, policy, codec);
26
- /** Atomically append one reconstruction coverage workspace CAS revision. */
27
- export const writeReconstructionCoverageWorkspace = (workspace, path, expectedRevision, policy) => writeRevisionedWorkspace(path, policy, {
28
- document: workspace,
29
- expectedRevision,
30
- codec,
31
- });
@@ -1,48 +0,0 @@
1
- import { z } from "zod";
2
- import { AnalysisInputError, AnalysisProtocolError, } from "../domain/errors.js";
3
- import { createEvidence } from "../domain/evidence.js";
4
- import { jsonObjectSchema, jsonValueSchema } from "../domain/jsonValue.js";
5
- import { createReconstructionReadinessReport } from "../domain/reconstructionReadiness.js";
6
- import { reconstructionReadinessInputSchema, } from "../domain/reconstructionReadinessSchemas.js";
7
- import { err, ok } from "../domain/result.js";
8
- import { JAVASCRIPT_APPLICATION_WORKFLOW_PROVIDER } from "./InvestigationProviders.js";
9
- const OPERATION = "evaluate_reconstruction_readiness";
10
- /** Parse one portable readiness request for both CLI and MCP adapters. */
11
- export const resolveReconstructionReadinessRequest = (input) => {
12
- const parsed = reconstructionReadinessInputSchema.safeParse(input);
13
- return parsed.success
14
- ? ok(parsed.data)
15
- : err(new AnalysisInputError(OPERATION, { cause: parsed.error }));
16
- };
17
- /** Evaluate and wrap one deterministic readiness report in Evidence v2. */
18
- export const evaluateReconstructionReadinessValidated = (input) => {
19
- try {
20
- const report = createReconstructionReadinessReport(input);
21
- return ok(createEvidence(undefined, JAVASCRIPT_APPLICATION_WORKFLOW_PROVIDER, {
22
- predicateType: "rea.reconstruction-readiness-report/v1",
23
- operation: OPERATION,
24
- parameters: jsonObjectSchema.parse({
25
- source_digest: report.source_digest,
26
- expected_source_digest: input.replay.expected_source_digest,
27
- }),
28
- result: jsonValueSchema.parse(report),
29
- rawResult: null,
30
- confidence: "inferred",
31
- authority: "analyst-inference",
32
- environment: null,
33
- limitations: report.status === "pass"
34
- ? []
35
- : [
36
- "Aggregate pass is withheld until every required conformance stage passes.",
37
- ],
38
- evidenceLinks: report.evidence_links,
39
- }));
40
- }
41
- catch (cause) {
42
- if (cause instanceof z.ZodError)
43
- return err(new AnalysisInputError(OPERATION, { cause }));
44
- return err(new AnalysisProtocolError("Reconstruction readiness evaluation failed", {
45
- cause,
46
- }));
47
- }
48
- };
@@ -1,173 +0,0 @@
1
- import { Cli, z } from "incur";
2
- import { runCrossVersionInvestigation } from "./application/CrossVersionInvestigation.js";
3
- import { logCliCommand } from "./cliLogging.js";
4
- import { parseConfig } from "./config.js";
5
- import { projectAnalysisError } from "./domain/errors.js";
6
- import { loadConfiguredPermissionAuthority } from "./application/PermissionConfiguration.js";
7
- import { authorizeFileReadWithDeferredWrite, authorizeRootPermission, } from "./application/DeferredFileAuthorization.js";
8
- import { CLI_COMMANDS } from "./cliCommandNames.js";
9
- const investigationOptionsSchema = z.object({
10
- yes: z
11
- .boolean()
12
- .default(false)
13
- .describe("Approve persistent workspace writes"),
14
- workspaceName: z
15
- .string()
16
- .trim()
17
- .min(1)
18
- .max(200)
19
- .default("default")
20
- .describe("Logical name recorded in the investigation workspace"),
21
- expectedRevision: z
22
- .number()
23
- .int()
24
- .min(1)
25
- .optional()
26
- .describe("Required current workspace revision for an atomic update"),
27
- replayRunId: z
28
- .string()
29
- .regex(/^run_[a-f0-9]{64}$/u)
30
- .optional()
31
- .describe("Replay one verified complete workspace run without rescanning"),
32
- maxEntries: z
33
- .number()
34
- .int()
35
- .min(1)
36
- .max(50_000)
37
- .default(10_000)
38
- .describe("Maximum artifact entries to inspect per version"),
39
- maxTotalBytes: z
40
- .number()
41
- .int()
42
- .min(1)
43
- .max(Number.MAX_SAFE_INTEGER)
44
- .default(1_073_741_824)
45
- .describe("Maximum total uncompressed artifact content to inspect"),
46
- maxEntryBytes: z
47
- .number()
48
- .int()
49
- .min(1)
50
- .max(Number.MAX_SAFE_INTEGER)
51
- .default(268_435_456)
52
- .describe("Maximum uncompressed content to inspect for one entry"),
53
- pageSize: z
54
- .number()
55
- .int()
56
- .min(1)
57
- .max(500)
58
- .default(500)
59
- .describe("Maximum graph items loaded per investigation page"),
60
- changeLimit: z
61
- .number()
62
- .int()
63
- .min(1)
64
- .max(500)
65
- .default(500)
66
- .describe("Maximum version changes to record"),
67
- integrityPolicy: z
68
- .enum(["fail", "record-and-continue"])
69
- .default("fail")
70
- .describe("Behavior when declared artifact integrity does not match"),
71
- integrityContinueApproved: z
72
- .boolean()
73
- .default(false)
74
- .describe("Approve continuing after recorded integrity mismatches"),
75
- maxIntegrityMismatches: z
76
- .number()
77
- .int()
78
- .min(1)
79
- .max(100)
80
- .default(10)
81
- .describe("Maximum integrity mismatches to record before stopping"),
82
- });
83
- /** Register the persistent cross-version CLI workflow. */
84
- export const registerInvestigationCommands = (cli, logger) => {
85
- cli.command(CLI_COMMANDS.investigateVersions, {
86
- description: "Run or resume a persistent cross-version artifact investigation",
87
- args: z.object({
88
- leftPath: z.string().describe("Earlier artifact or directory path"),
89
- rightPath: z.string().describe("Later artifact or directory path"),
90
- workspacePath: z.string().describe("Persistent workspace JSON path"),
91
- }),
92
- options: investigationOptionsSchema,
93
- alias: {
94
- workspaceName: "workspace-name",
95
- expectedRevision: "expected-revision",
96
- replayRunId: "replay-run-id",
97
- maxEntries: "max-entries",
98
- maxTotalBytes: "max-total-bytes",
99
- maxEntryBytes: "max-entry-bytes",
100
- pageSize: "page-size",
101
- changeLimit: "change-limit",
102
- integrityPolicy: "integrity-policy",
103
- integrityContinueApproved: "integrity-continue-approved",
104
- maxIntegrityMismatches: "max-integrity-mismatches",
105
- yes: "y",
106
- },
107
- run: ({ args, options }) => logCliCommand(logger, "investigate-versions", () => runInvestigation(args, options)),
108
- });
109
- };
110
- const runInvestigation = async (args, options) => {
111
- if (!options.yes)
112
- return {
113
- error: "ApprovalRequired",
114
- message: "Persistent workspace writes require explicit --yes approval.",
115
- };
116
- const config = parseConfig(process.env);
117
- if (!config.ok)
118
- return cliError(config.error);
119
- const authority = await loadConfiguredPermissionAuthority(config.value);
120
- if (!authority.ok)
121
- return cliError(authority.error);
122
- const workspaceAuthorization = await authorizeFileReadWithDeferredWrite(authority.value, {
123
- path: args.workspacePath,
124
- readCapability: "investigation_workspace_read",
125
- writeCapability: "investigation_workspace_write",
126
- operation: "investigate_versions",
127
- });
128
- if (!workspaceAuthorization.ok)
129
- return cliError(workspaceAuthorization.error);
130
- const investigated = await runCrossVersionInvestigation({
131
- approved: true,
132
- workspace_path: args.workspacePath,
133
- workspace_name: options.workspaceName,
134
- ...(options.expectedRevision === undefined
135
- ? {}
136
- : { expected_workspace_revision: options.expectedRevision }),
137
- ...(options.replayRunId === undefined
138
- ? {}
139
- : { replay_run_id: options.replayRunId }),
140
- left_path: args.leftPath,
141
- right_path: args.rightPath,
142
- integrity_policy: options.integrityPolicy,
143
- integrity_continue_approved: options.integrityContinueApproved,
144
- max_integrity_mismatches: options.maxIntegrityMismatches,
145
- options: {
146
- max_entries: options.maxEntries,
147
- max_total_bytes: options.maxTotalBytes,
148
- max_entry_bytes: options.maxEntryBytes,
149
- max_compression_ratio: 1_000,
150
- max_depth: 20,
151
- max_path_bytes: 4_096,
152
- page_size: options.pageSize,
153
- change_limit: options.changeLimit,
154
- },
155
- }, config.value.evidenceFilePolicy, {
156
- inputRoots: config.value.investigationInputRoots,
157
- integrityContinueEnabled: config.value.artifactIntegrityContinueEnabled,
158
- authorizeInputRead: () => authorizeRootPermission(authority.value, {
159
- capability: "investigation_input",
160
- roots: [args.leftPath, args.rightPath],
161
- access: "read",
162
- operation: "investigate_versions",
163
- }),
164
- authorizeWorkspaceWrite: workspaceAuthorization.value.authorizeWrite,
165
- });
166
- return investigated.ok
167
- ? investigated.value.evidence
168
- : cliError(investigated.error);
169
- };
170
- const cliError = (error) => ({
171
- error: "Analysis failed",
172
- ...projectAnalysisError(error),
173
- });
@@ -1,15 +0,0 @@
1
- /** Project a Cartesian product without materializing values beyond the output limit. */
2
- export const projectBoundedCartesian = (left, right, maximum, project) => {
3
- const values = [];
4
- for (const leftValue of left) {
5
- for (const rightValue of right) {
6
- if (values.length === maximum)
7
- return {
8
- values,
9
- omitted: left.length * right.length - values.length,
10
- };
11
- values.push(project(leftValue, rightValue));
12
- }
13
- }
14
- return { values, omitted: 0 };
15
- };