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
@@ -3,18 +3,10 @@ import canonicalize from "canonicalize";
3
3
  import { z } from "zod";
4
4
  import { evidenceEnvelopeSchema } from "./evidence.js";
5
5
  import { evidenceBundleSchema } from "./evidenceBundle.js";
6
- /** Schema version for the conformance package format. */
7
- export const CONFORMANCE_PACKAGE_VERSION = 1;
8
- /** A stable, path-independent identifier for a conformance package. */
9
- export const conformancePackageIdSchema = z
10
- .string()
11
- .regex(/^cp_[a-f0-9]{64}$/u);
12
- /** Identifier for a single scenario within a package. */
13
- export const scenarioIdSchema = z
14
- .string()
15
- .regex(/^[A-Za-z][A-Za-z0-9._-]{0,99}$/u);
16
- /** Deterministic manifest for a scenario fixture. */
17
- export const scenarioManifestSchema = z.strictObject({
6
+ import { err, ok } from "./result.js";
7
+ const conformancePackageIdSchema = z.string().regex(/^cp_[a-f0-9]{64}$/u);
8
+ const scenarioIdSchema = z.string().regex(/^[A-Za-z][A-Za-z0-9._-]*$/u);
9
+ const scenarioManifestSchema = z.strictObject({
18
10
  scenario_id: scenarioIdSchema,
19
11
  name: z.string().min(1),
20
12
  description: z.string().min(1),
@@ -25,8 +17,7 @@ export const scenarioManifestSchema = z.strictObject({
25
17
  /** Expected output patterns that must appear in the capture. */
26
18
  expected_patterns: z.array(z.string()).default([]),
27
19
  });
28
- /** Replay plan describing how a scenario is replayed deterministically. */
29
- export const replayPlanSchema = z.strictObject({
20
+ const replayPlanSchema = z.strictObject({
30
21
  scenario_id: scenarioIdSchema,
31
22
  /** Ordered steps to execute during replay. */
32
23
  steps: z
@@ -36,37 +27,30 @@ export const replayPlanSchema = z.strictObject({
36
27
  arguments: z.array(z.string()).default([]),
37
28
  timeout_ms: z.number().int().positive(),
38
29
  }))
39
- .min(1)
40
- .max(100),
30
+ .min(1),
41
31
  /** Environment variables to set (never inherit host paths). */
42
32
  environment: z.record(z.string(), z.string()).default({}),
43
33
  });
44
- /** Shim plan for intercepting observable effects. */
45
- export const shimPlanSchema = z.strictObject({
34
+ const shimPlanSchema = z.strictObject({
46
35
  scenario_id: scenarioIdSchema,
47
36
  /** Shims to install, each intercepting a named effect. */
48
- shims: z
49
- .array(z.strictObject({
37
+ shims: z.array(z.strictObject({
50
38
  shim_id: z.string().min(1),
51
39
  kind: z.enum(["filesystem", "network", "process", "signal"]),
52
40
  target: z.string().min(1),
53
41
  policy: z.enum(["observe", "allow", "block", "emulate"]),
54
- }))
55
- .min(0)
56
- .max(50),
42
+ })),
57
43
  });
58
- /** Expected evidence for a scenario, checked against the captured run. */
59
- export const expectedEvidenceSchema = z.strictObject({
44
+ const expectedEvidenceSchema = z.strictObject({
60
45
  scenario_id: scenarioIdSchema,
61
46
  /** Expected evidence envelopes. */
62
- envelopes: z.array(evidenceEnvelopeSchema).min(0).max(100),
47
+ envelopes: z.array(evidenceEnvelopeSchema),
63
48
  /** Expected evidence bundle. */
64
49
  bundle: evidenceBundleSchema.nullable(),
65
50
  /** Required dimensions that must be present in the evidence. */
66
51
  required_dimensions: z.array(z.string().min(1)).default([]),
67
52
  });
68
- /** Verifier contract describing how to validate conformance. */
69
- export const verifierContractSchema = z.strictObject({
53
+ const verifierContractSchema = z.strictObject({
70
54
  scenario_id: scenarioIdSchema,
71
55
  /** Dimensions to verify. */
72
56
  dimensions: z
@@ -75,95 +59,140 @@ export const verifierContractSchema = z.strictObject({
75
59
  required: z.boolean().default(true),
76
60
  comparison: z.enum(["exact", "semantic", "fuzzy"]),
77
61
  }))
78
- .min(1)
79
- .max(50),
62
+ .min(1),
80
63
  /** Tolerance for timing differences in milliseconds. */
81
64
  timing_tolerance_ms: z.number().int().nonnegative().default(0),
82
65
  });
83
- /** Top-level conformance package manifest. */
84
- export const conformancePackageSchema = z.strictObject({
85
- schema_version: z.literal(CONFORMANCE_PACKAGE_VERSION),
86
- package_id: conformancePackageIdSchema,
66
+ const conformancePackageContentsSchema = z.strictObject({
87
67
  name: z.string().min(1),
88
68
  description: z.string().min(1),
89
69
  created_at: z.string().datetime(),
90
70
  /** Scenario manifests. */
91
- scenarios: z.array(scenarioManifestSchema).min(1).max(100),
92
- /** Replay plans keyed by scenario_id. */
93
- replay_plans: z.array(replayPlanSchema).min(1).max(100),
94
- /** Shim plans keyed by scenario_id. */
71
+ scenarios: z.array(scenarioManifestSchema).min(1),
72
+ /** Exactly one replay plan for each scenario. */
73
+ replay_plans: z.array(replayPlanSchema).min(1),
74
+ /** At most one optional shim plan for each scenario. */
95
75
  shim_plans: z.array(shimPlanSchema).default([]),
96
- /** Expected evidence for each scenario. */
97
- expected_evidence: z.array(expectedEvidenceSchema).min(1).max(100),
98
- /** Verifier contracts for each scenario. */
99
- verifier_contracts: z.array(verifierContractSchema).min(1).max(100),
76
+ /** Exactly one expected-evidence record for each scenario. */
77
+ expected_evidence: z.array(expectedEvidenceSchema).min(1),
78
+ /** Exactly one verifier contract for each scenario. */
79
+ verifier_contracts: z.array(verifierContractSchema).min(1),
100
80
  });
101
- /** Validate a conformance package and cross-check internal references. */
102
- export function validateConformancePackage(input) {
81
+ const conformancePackageRecordSchema = conformancePackageContentsSchema.extend({
82
+ package_id: conformancePackageIdSchema,
83
+ });
84
+ const conformancePackageSchema = conformancePackageRecordSchema.brand();
85
+ /** Parse unknown input once into a package whose aggregate invariants hold. */
86
+ export function parseConformancePackage(input) {
103
87
  const parsed = conformancePackageSchema.safeParse(input);
104
88
  if (!parsed.success)
105
- return {
106
- ok: false,
107
- error: {
108
- kind: "invalid_package",
109
- message: parsed.error.issues[0]?.message ?? "invalid package",
110
- },
111
- };
112
- const pkg = parsed.data;
113
- // Check for duplicate scenario IDs
114
- const seen = new Set();
115
- for (const s of pkg.scenarios) {
116
- if (seen.has(s.scenario_id))
89
+ return err({
90
+ kind: "invalid_package",
91
+ message: parsed.error.issues[0]?.message ?? "Invalid package",
92
+ });
93
+ const relationError = parseScenarioRelations(parsed.data);
94
+ if (relationError !== undefined)
95
+ return err(relationError);
96
+ const expectedPackageId = computePackageId(packageContents(parsed.data));
97
+ if (parsed.data.package_id !== expectedPackageId)
98
+ return err({
99
+ kind: "package_id_mismatch",
100
+ actual: parsed.data.package_id,
101
+ expected: expectedPackageId,
102
+ message: "Package identifier does not match its canonical contents",
103
+ });
104
+ return ok(parsed.data);
105
+ }
106
+ /** Create a content-addressed package from source-owned typed fields. */
107
+ export function createConformancePackage(input) {
108
+ const contents = conformancePackageContentsSchema.safeParse(input);
109
+ if (!contents.success)
110
+ throw new TypeError(`Invalid conformance package source: ${contents.error.issues[0]?.message ?? "unknown parse failure"}`);
111
+ const parsed = parseConformancePackage({
112
+ ...contents.data,
113
+ package_id: computePackageId(contents.data),
114
+ });
115
+ if (!parsed.ok)
116
+ throw new TypeError(`Invalid conformance package source: ${parsed.error.message}`);
117
+ return parsed.value;
118
+ }
119
+ const parseScenarioRelations = (pkg) => {
120
+ const scenarioIds = new Set();
121
+ for (const scenario of pkg.scenarios) {
122
+ if (scenarioIds.has(scenario.scenario_id))
117
123
  return {
118
- ok: false,
119
- error: { kind: "duplicate_scenario", scenario_id: s.scenario_id },
124
+ kind: "duplicate_scenario",
125
+ scenario_id: scenario.scenario_id,
126
+ message: `Duplicate scenario ${scenario.scenario_id}`,
120
127
  };
121
- seen.add(s.scenario_id);
128
+ scenarioIds.add(scenario.scenario_id);
122
129
  }
123
- // Check that replay plans reference existing scenarios
124
- for (const rp of pkg.replay_plans) {
125
- if (!seen.has(rp.scenario_id))
130
+ const sections = [
131
+ { name: "replay_plans", entries: pkg.replay_plans, required: true },
132
+ { name: "shim_plans", entries: pkg.shim_plans, required: false },
133
+ {
134
+ name: "expected_evidence",
135
+ entries: pkg.expected_evidence,
136
+ required: true,
137
+ },
138
+ {
139
+ name: "verifier_contracts",
140
+ entries: pkg.verifier_contracts,
141
+ required: true,
142
+ },
143
+ ];
144
+ for (const section of sections) {
145
+ const error = parseScenarioSection(scenarioIds, section);
146
+ if (error !== undefined)
147
+ return error;
148
+ }
149
+ return undefined;
150
+ };
151
+ const parseScenarioSection = (scenarioIds, section) => {
152
+ const referenced = new Set();
153
+ for (const entry of section.entries) {
154
+ if (!scenarioIds.has(entry.scenario_id))
126
155
  return {
127
- ok: false,
128
- error: {
129
- kind: "scenario_not_found",
130
- scenario_id: rp.scenario_id,
131
- },
156
+ kind: "unknown_scenario_reference",
157
+ section: section.name,
158
+ scenario_id: entry.scenario_id,
159
+ message: `${section.name} references unknown scenario ${entry.scenario_id}`,
132
160
  };
133
- }
134
- // Check that expected evidence references existing scenarios
135
- for (const ee of pkg.expected_evidence) {
136
- if (!seen.has(ee.scenario_id))
161
+ if (referenced.has(entry.scenario_id))
137
162
  return {
138
- ok: false,
139
- error: {
140
- kind: "scenario_not_found",
141
- scenario_id: ee.scenario_id,
142
- },
163
+ kind: "duplicate_scenario_reference",
164
+ section: section.name,
165
+ scenario_id: entry.scenario_id,
166
+ message: `${section.name} contains duplicate scenario ${entry.scenario_id}`,
143
167
  };
168
+ referenced.add(entry.scenario_id);
144
169
  }
145
- // Check that verifier contracts reference existing scenarios
146
- for (const vc of pkg.verifier_contracts) {
147
- if (!seen.has(vc.scenario_id))
170
+ if (!section.required)
171
+ return undefined;
172
+ for (const scenarioId of scenarioIds) {
173
+ if (!referenced.has(scenarioId))
148
174
  return {
149
- ok: false,
150
- error: {
151
- kind: "scenario_not_found",
152
- scenario_id: vc.scenario_id,
153
- },
175
+ kind: "missing_scenario_reference",
176
+ section: section.name,
177
+ scenario_id: scenarioId,
178
+ message: `${section.name} is missing scenario ${scenarioId}`,
154
179
  };
155
180
  }
156
- return { ok: true, value: pkg };
157
- }
158
- /** Compute a deterministic package ID from the canonical JSON. */
159
- export function computePackageId(pkg) {
160
- const json = canonicalize(pkg);
161
- if (!json)
162
- throw new Error("failed to canonicalize package");
181
+ return undefined;
182
+ };
183
+ const packageContents = (pkg) => ({
184
+ name: pkg.name,
185
+ description: pkg.description,
186
+ created_at: pkg.created_at,
187
+ scenarios: pkg.scenarios,
188
+ replay_plans: pkg.replay_plans,
189
+ shim_plans: pkg.shim_plans,
190
+ expected_evidence: pkg.expected_evidence,
191
+ verifier_contracts: pkg.verifier_contracts,
192
+ });
193
+ const computePackageId = (contents) => {
194
+ const json = canonicalize(contents);
195
+ if (json === undefined)
196
+ throw new TypeError("Could not canonicalize parsed conformance package");
163
197
  return `cp_${createHash("sha256").update(json).digest("hex")}`;
164
- }
165
- /** Create a conformance package with an auto-computed package_id. */
166
- export function createConformancePackage(pkg) {
167
- const package_id = computePackageId(pkg);
168
- return { package_id, ...pkg };
169
- }
198
+ };
@@ -1,5 +1,5 @@
1
1
  import { z } from "zod";
2
- import { conformancePackageSchema, } from "./conformancePackage.js";
2
+ import { parseConformancePackage } from "./conformancePackage.js";
3
3
  import { evaluatePackageTrustGates, trustGateResultSchema, } from "./conformanceTrustGate.js";
4
4
  /** Result of a single scenario replay. */
5
5
  export const scenarioReplayResultSchema = z.strictObject({
@@ -11,7 +11,8 @@ export const scenarioReplayResultSchema = z.strictObject({
11
11
  error: z.string().nullable(),
12
12
  });
13
13
  /** Result of replaying an entire conformance package. */
14
- export const packageReplayResultSchema = z.strictObject({
14
+ export const packageReplayResultSchema = z
15
+ .strictObject({
15
16
  package_id: z.string().min(1),
16
17
  total_scenarios: z.number().int().positive(),
17
18
  passed: z.number().int().nonnegative(),
@@ -29,6 +30,33 @@ export const packageReplayResultSchema = z.strictObject({
29
30
  message: z.string(),
30
31
  })
31
32
  .nullable(),
33
+ })
34
+ .superRefine((result, context) => {
35
+ const count = (status) => result.scenario_results.filter((item) => item.status === status).length;
36
+ const countMismatch = result.passed !== count("pass") ||
37
+ result.failed !== count("fail") ||
38
+ result.errored !== count("error") ||
39
+ result.skipped !== count("skipped");
40
+ const driftDetected = result.trust_gate_results.some(({ verdict }) => verdict === "fail");
41
+ if (result.total_scenarios !== result.scenario_results.length ||
42
+ countMismatch)
43
+ context.addIssue({
44
+ code: "custom",
45
+ message: "Scenario totals must summarize scenario results",
46
+ path: ["total_scenarios"],
47
+ });
48
+ if (result.drift_detected !== driftDetected)
49
+ context.addIssue({
50
+ code: "custom",
51
+ message: "Drift status must summarize trust-gate failures",
52
+ path: ["drift_detected"],
53
+ });
54
+ if (!driftDetected && result.first_drift !== null)
55
+ context.addIssue({
56
+ code: "custom",
57
+ message: "A drift witness requires a failed trust gate",
58
+ path: ["first_drift"],
59
+ });
32
60
  });
33
61
  /**
34
62
  * Default no-op scenario runner that skips all scenarios.
@@ -50,10 +78,10 @@ async function defaultRunner() {
50
78
  * between the captured run and the committed package.
51
79
  */
52
80
  export async function replayConformancePackage(packageInput, actualEvidence, runner = defaultRunner, options = {}) {
53
- const parsed = conformancePackageSchema.safeParse(packageInput);
54
- if (!parsed.success)
55
- throw new TypeError(`invalid conformance package: ${parsed.error.issues[0]?.message ?? "unknown"}`);
56
- const pkg = parsed.data;
81
+ const parsed = parseConformancePackage(packageInput);
82
+ if (!parsed.ok)
83
+ throw new TypeError(`invalid conformance package: ${parsed.error.message}`);
84
+ const pkg = parsed.value;
57
85
  const scenarioResults = [];
58
86
  let passed = 0;
59
87
  let failed = 0;
@@ -89,7 +117,7 @@ export async function replayConformancePackage(packageInput, actualEvidence, run
89
117
  message: first_drift_gate.first_divergence.message,
90
118
  }
91
119
  : null;
92
- return {
120
+ return packageReplayResultSchema.parse({
93
121
  package_id: pkg.package_id,
94
122
  total_scenarios: pkg.scenarios.length,
95
123
  passed,
@@ -100,5 +128,5 @@ export async function replayConformancePackage(packageInput, actualEvidence, run
100
128
  trust_gate_results: trustGateResults,
101
129
  drift_detected,
102
130
  first_drift,
103
- };
131
+ });
104
132
  }
@@ -6,19 +6,28 @@ export const dimensionResultSchema = z.strictObject({
6
6
  message: z.string().default(""),
7
7
  evidence_ids: z.array(z.string()).default([]),
8
8
  });
9
- /** Result of evaluating a trust gate for one scenario. */
10
- export const trustGateResultSchema = z.strictObject({
9
+ const trustGateResultShape = {
11
10
  scenario_id: z.string().min(1),
12
- verdict: z.enum(["pass", "fail", "unknown"]),
13
11
  dimension_results: z.array(dimensionResultSchema),
14
- first_divergence: z
15
- .strictObject({
16
- dimension: z.string().min(1),
17
- evidence_id: z.string().min(1),
18
- message: z.string(),
19
- })
20
- .nullable(),
12
+ };
13
+ const divergenceSchema = z.strictObject({
14
+ dimension: z.string().min(1),
15
+ evidence_id: z.string().min(1),
16
+ message: z.string(),
21
17
  });
18
+ /** Result of evaluating a trust gate for one scenario. */
19
+ export const trustGateResultSchema = z.union([
20
+ z.strictObject({
21
+ ...trustGateResultShape,
22
+ verdict: z.enum(["pass", "unknown"]),
23
+ first_divergence: z.null(),
24
+ }),
25
+ z.strictObject({
26
+ ...trustGateResultShape,
27
+ verdict: z.literal("fail"),
28
+ first_divergence: divergenceSchema.nullable(),
29
+ }),
30
+ ]);
22
31
  /** Dimension that is volatile due to timing or normalization. */
23
32
  const VOLATILE_DIMENSIONS = new Set([
24
33
  "timing",
@@ -301,12 +310,12 @@ export function evaluateTrustGate(contract, expectedEvidence, actualEvidence, op
301
310
  : hasUnknown
302
311
  ? "unknown"
303
312
  : "pass";
304
- return {
313
+ return trustGateResultSchema.parse({
305
314
  scenario_id: contract.scenario_id,
306
315
  verdict,
307
316
  dimension_results: dimensionResults,
308
317
  first_divergence: firstDivergence,
309
- };
318
+ });
310
319
  }
311
320
  /**
312
321
  * Evaluate trust gates for all scenarios in a conformance package.
@@ -317,8 +326,8 @@ export function evaluatePackageTrustGates(pkg, actualEvidence, options = {}) {
317
326
  const results = [];
318
327
  for (const contract of pkg.verifier_contracts) {
319
328
  const expected = pkg.expected_evidence.find((e) => e.scenario_id === contract.scenario_id);
320
- if (!expected)
321
- continue;
329
+ if (expected === undefined)
330
+ throw new TypeError(`Parsed conformance package is missing expected evidence for ${contract.scenario_id}`);
322
331
  const expectedEvidence = expected.envelopes[0] ?? {};
323
332
  const actual = actualEvidence[contract.scenario_id] ?? {};
324
333
  const result = evaluateTrustGate(contract, expectedEvidence, actual, options);
@@ -85,7 +85,7 @@ export const customProtocolCaptureSchema = z.strictObject({
85
85
  /** Transport type for this session. */
86
86
  transport: transportTypeSchema,
87
87
  /** Captured frames in order. */
88
- frames: z.array(protocolFrameSchema).min(0).max(100_000),
88
+ frames: z.array(protocolFrameSchema),
89
89
  /** Authentication flow events. */
90
90
  auth_events: z.array(authFlowEventSchema).default([]),
91
91
  /** Whether any frame was truncated. */