rea-agents 3.0.0 → 3.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (628) hide show
  1. package/README.md +83 -108
  2. package/bridge/ghidra/ReaGhidraBridge.java +609 -841
  3. package/bridge/hopper_bridge.py +99 -344
  4. package/dist/application/AbortablePromise.js +6 -3
  5. package/dist/application/AnalysisContextQueries.js +21 -9
  6. package/dist/application/AnalysisSnapshotCache.js +0 -1
  7. package/dist/application/AnalysisSnapshotFiles.js +7 -7
  8. package/dist/application/AndroidApplicationService.js +1 -1
  9. package/dist/application/AppleApplicationService.js +1 -1
  10. package/dist/application/ArtifactExtraction.js +35 -54
  11. package/dist/application/ArtifactExtractionDestination.js +17 -0
  12. package/dist/application/ArtifactGraphConstruction.js +2 -17
  13. package/dist/application/ArtifactInventory/classify.js +2 -6
  14. package/dist/application/ArtifactInventory/hash.js +2 -20
  15. package/dist/application/ArtifactInventory/policy.js +17 -0
  16. package/dist/application/ArtifactInventory/reader.js +1 -4
  17. package/dist/application/ArtifactInventory/scanCanonical.js +8 -15
  18. package/dist/application/ArtifactInventory/scanReader.js +76 -58
  19. package/dist/application/ArtifactInventory/types.js +1 -5
  20. package/dist/application/ArtifactInventory.js +6 -14
  21. package/dist/application/AuthorizedArtifactInventory.js +3 -13
  22. package/dist/application/BinarySession.js +54 -28
  23. package/dist/application/BinarySessionComposition.js +0 -11
  24. package/dist/application/BinarySessionOpen.js +2 -1
  25. package/dist/application/BinarySessionRecords.js +24 -86
  26. package/dist/application/BinarySessionStatus.js +16 -21
  27. package/dist/application/BinaryTargetResolver.js +216 -0
  28. package/dist/application/BrowserEvidence.js +39 -57
  29. package/dist/application/BrowserObservationService.js +3 -6
  30. package/dist/application/BrowserScenarioCaptureService.js +3 -6
  31. package/dist/application/BrowserScenarioEvidence.js +3 -3
  32. package/dist/application/CallPathTracing.js +2 -36
  33. package/dist/application/CapabilityClientRequirements.js +26 -0
  34. package/dist/application/CapabilityInventory.js +143 -77
  35. package/dist/application/ClientConfigurationDocument.js +27 -0
  36. package/dist/application/ClientRegistrationStatus.js +16 -13
  37. package/dist/application/CommandShimReplay.js +14 -1
  38. package/dist/application/DirectAnalysis.js +22 -46
  39. package/dist/application/DirectAnalysisStatus.js +5 -61
  40. package/dist/application/Doctor.js +11 -32
  41. package/dist/application/DoctorDiagnostics.js +1 -2
  42. package/dist/application/DoctorScope.js +1 -1
  43. package/dist/application/ElectronActiveEvidence.js +50 -0
  44. package/dist/application/ElectronActiveObservationPort.js +1 -0
  45. package/dist/application/ElectronActiveObservationService.js +78 -0
  46. package/dist/application/ElectronBoundaryAnalysis.js +7 -8
  47. package/dist/application/ElectronBoundaryGraphContext.js +1 -1
  48. package/dist/application/ElectronBoundaryGraphIpc.js +3 -3
  49. package/dist/application/ElectronBoundaryGraphNative.js +1 -2
  50. package/dist/application/ElectronBoundaryGraphWindows.js +6 -8
  51. package/dist/application/ElectronEvidence.js +4 -7
  52. package/dist/application/ElectronObservationService.js +5 -9
  53. package/dist/application/EnhancedLiteralTracing.js +42 -65
  54. package/dist/application/EnhancedTools.js +98 -64
  55. package/dist/application/EvidenceBundleCommands.js +16 -12
  56. package/dist/application/EvidenceBundleFiles.js +9 -15
  57. package/dist/application/EvidenceLedger.js +14 -42
  58. package/dist/application/FilesystemSnapshot.js +2 -3
  59. package/dist/application/InterfaceBuilderAnalysis.js +266 -0
  60. package/dist/application/InventoryProjectionEvidence.js +4 -2
  61. package/dist/application/InvestigationProviders.js +1 -1
  62. package/dist/application/JavaScriptApplicationEvidence.js +2 -5
  63. package/dist/application/JavaScriptApplicationEvidenceGraph.js +6 -10
  64. package/dist/application/JavaScriptApplicationService.js +6 -29
  65. package/dist/application/JavaScriptApplicationWorkflowEvidence.js +5 -5
  66. package/dist/application/JavaScriptApplicationWorkflowService.js +0 -8
  67. package/dist/application/JavaScriptArtifactAnalysis.js +38 -127
  68. package/dist/application/JavaScriptArtifactFiles.js +67 -107
  69. package/dist/application/JavaScriptArtifactGraphAccumulator.js +0 -7
  70. package/dist/application/JavaScriptArtifactGraphBuilder.js +7 -58
  71. package/dist/application/JavaScriptArtifactGraphBundlers.js +1 -6
  72. package/dist/application/JavaScriptArtifactGraphContext.js +12 -39
  73. package/dist/application/JavaScriptArtifactGraphDocuments.js +4 -11
  74. package/dist/application/JavaScriptArtifactGraphEvidence.js +0 -14
  75. package/dist/application/JavaScriptArtifactGraphFindings.js +3 -3
  76. package/dist/application/JavaScriptArtifactGraphStructure.js +16 -17
  77. package/dist/application/JavaScriptArtifactPathResolution.js +61 -49
  78. package/dist/application/JavaScriptArtifactReconstruction.js +5 -10
  79. package/dist/application/JavaScriptArtifactReconstructionInput.js +2 -14
  80. package/dist/application/JavaScriptJsonModules.js +2 -2
  81. package/dist/application/JavaScriptModuleRelationships.js +22 -27
  82. package/dist/application/JavaScriptReplayPermission.js +1 -1
  83. package/dist/application/JavaScriptReplayPlanning.js +9 -3
  84. package/dist/application/JavaScriptReplayService.js +29 -47
  85. package/dist/application/JavaScriptReturnShapeProjection.js +12 -42
  86. package/dist/application/JavaScriptRuntimeObservationEvidence.js +7 -8
  87. package/dist/application/JavaScriptRuntimeObservationService.js +4 -8
  88. package/dist/application/JavaScriptRuntimeReconciliationEvidence.js +2 -3
  89. package/dist/application/JavaScriptSemanticGraphBuilder.js +11 -41
  90. package/dist/application/JavaScriptSemanticGraphConstruction.js +5 -29
  91. package/dist/application/JavaScriptSemanticGraphEvidence.js +1 -1
  92. package/dist/application/JavaScriptSemanticGraphFingerprintProjection.js +1 -1
  93. package/dist/application/JavaScriptSemanticGraphFlowProjection.js +0 -13
  94. package/dist/application/JavaScriptSemanticGraphProjection.js +1 -3
  95. package/dist/application/JavaScriptSemanticTraceService.js +1 -10
  96. package/dist/application/JsonFiles.js +79 -0
  97. package/dist/application/LinuxHopper.js +11 -9
  98. package/dist/application/LoopbackReplay.js +26 -23
  99. package/dist/application/LoopbackReplayRecorder.js +29 -1
  100. package/dist/application/ManagedApplicationGraphService.js +1 -2
  101. package/dist/application/ManagedMemberComparisonService.js +11 -41
  102. package/dist/application/ManagedNativeVerificationService.js +1 -2
  103. package/dist/application/ManagedReconstructionService.js +1 -1
  104. package/dist/application/ManagedRuntimeCorrelationService.js +14 -13
  105. package/dist/application/NativeApiInspection.js +2 -7
  106. package/dist/application/NativeUiActionTrace.js +394 -0
  107. package/dist/application/NodeRuntimeCharacterizationService.js +11 -16
  108. package/dist/application/PermissionAuthority.js +15 -7
  109. package/dist/application/PermissionFailure.js +5 -0
  110. package/dist/application/ProcessCaptureAuthority.js +5 -7
  111. package/dist/application/ProcessCaptureJournal.js +3 -2
  112. package/dist/application/ProcessCaptureLifecycle.js +10 -12
  113. package/dist/application/ProcessCheckpoints.js +29 -11
  114. package/dist/application/ProcessCli.js +8 -17
  115. package/dist/application/ProcessEvidence.js +5 -7
  116. package/dist/application/ProcessHarness.js +60 -20
  117. package/dist/application/ProcessNormalization.js +2 -1
  118. package/dist/application/ProcessReactiveCoordinator.js +2 -4
  119. package/dist/application/ProcessReactiveEffects.js +9 -3
  120. package/dist/application/ProcessReactiveHarness.js +13 -7
  121. package/dist/application/ProcessSampling.js +2 -4
  122. package/dist/application/ProcessTimer.js +39 -0
  123. package/dist/application/ProjectPermissionStore.js +39 -95
  124. package/dist/application/RealHopperAssertions.js +20 -66
  125. package/dist/application/ReconstructionCoverageService.js +12 -58
  126. package/dist/application/ReconstructionObligationAuthority.js +2 -2
  127. package/dist/application/ReconstructionObligationCandidates.js +4 -4
  128. package/dist/application/ReconstructionObligationLedgerEvaluation.js +8 -15
  129. package/dist/application/ReconstructionObligationLedgerProjection.js +3 -7
  130. package/dist/application/ReconstructionObligationLedgerService.js +19 -38
  131. package/dist/application/ReferenceSourceImport.js +21 -47
  132. package/dist/application/ReferenceSourceImportEntries.js +2 -4
  133. package/dist/application/ReferenceSourceImportPolicy.js +5 -32
  134. package/dist/application/ReferenceSourceImportTypes.js +0 -16
  135. package/dist/application/RuntimeExecutableDiagnostics.js +55 -29
  136. package/dist/application/SessionProviderRouter.js +2 -2
  137. package/dist/application/Setup.js +1 -3
  138. package/dist/application/SetupClientConfiguration.js +22 -88
  139. package/dist/application/SetupRegistrationEnvironment.js +0 -7
  140. package/dist/application/StoreFileLock.js +119 -0
  141. package/dist/application/TerminalRenderer.js +2 -3
  142. package/dist/application/Uninstall.js +9 -14
  143. package/dist/application/UnknownEvidence.js +1 -1
  144. package/dist/application/WindowsCapabilities.js +5 -4
  145. package/dist/artifacts/ArtifactPaths.js +2 -5
  146. package/dist/artifacts/ArtifactProvider.js +43 -67
  147. package/dist/artifacts/DirectoryArtifactReader.js +13 -8
  148. package/dist/artifacts/MachOSliceArtifactReader.js +1 -5
  149. package/dist/artifacts/NativeDmgArtifactReader.js +11 -11
  150. package/dist/artifacts/NibArchive.js +269 -0
  151. package/dist/artifacts/SafeOutputTree.js +21 -31
  152. package/dist/browser/BrowserProcessStartup.js +1 -2
  153. package/dist/browser/CdpAuthorizedMainFrame.js +16 -0
  154. package/dist/browser/CdpBrowserProvider.js +3 -13
  155. package/dist/browser/CdpCanonicalJsonDigest.js +9 -0
  156. package/dist/browser/CdpCaptureDocuments.js +28 -76
  157. package/dist/browser/CdpCaptureEventBodyShapes.js +13 -33
  158. package/dist/browser/CdpCaptureEventHandlers.js +22 -87
  159. package/dist/browser/CdpCaptureEvents.js +2 -8
  160. package/dist/browser/CdpCaptureStorage.js +9 -20
  161. package/dist/browser/CdpCaptureStorageFingerprints.js +85 -95
  162. package/dist/browser/CdpCaptureValues.js +21 -21
  163. package/dist/browser/CdpConnection.js +10 -25
  164. package/dist/browser/CdpElectronInspection.js +29 -51
  165. package/dist/browser/CdpElectronProvider.js +10 -35
  166. package/dist/browser/CdpElectronScriptEvents.js +8 -16
  167. package/dist/browser/CdpElectronScripts.js +6 -35
  168. package/dist/browser/CdpElectronWorkers.js +6 -10
  169. package/dist/browser/CdpEndpoint.js +25 -41
  170. package/dist/browser/CdpObservationSession.js +14 -26
  171. package/dist/browser/CdpPageCapture.js +34 -48
  172. package/dist/browser/CdpPageCaptureScripts.js +1 -19
  173. package/dist/browser/CdpPageCaptureWorkers.js +6 -10
  174. package/dist/browser/CdpSafeMetadata.js +19 -22
  175. package/dist/browser/CdpScreenshot.js +3 -5
  176. package/dist/browser/CdpTargetSession.js +1 -2
  177. package/dist/browser/CdpWebMcpDiscovery.js +13 -22
  178. package/dist/browser/ElectronFileScope.js +8 -19
  179. package/dist/browser/JavaScriptRuntimeScope.js +10 -10
  180. package/dist/browser/PlaywrightBrowserScenarioProvider.js +31 -64
  181. package/dist/browser/PlaywrightElectronActiveActions.js +309 -0
  182. package/dist/browser/PlaywrightElectronActiveProvider.js +274 -0
  183. package/dist/browser/PlaywrightExecutionBoundary.js +16 -5
  184. package/dist/browser/PlaywrightScenarioActions.js +3 -7
  185. package/dist/browser/PlaywrightScenarioArtifacts.js +23 -92
  186. package/dist/browser/PlaywrightScenarioBrowser.js +7 -9
  187. package/dist/browser/PlaywrightScenarioEvents.js +45 -94
  188. package/dist/browser/PlaywrightScenarioSession.js +18 -34
  189. package/dist/browser/PngVisualDiff.js +22 -14
  190. package/dist/browser/SensitiveTextCapture.js +1 -18
  191. package/dist/browser/V8InspectorCaptureProjection.js +7 -7
  192. package/dist/browser/V8InspectorEndpoint.js +12 -14
  193. package/dist/browser/V8InspectorProvider.js +20 -61
  194. package/dist/browser/WebSourceMapFetcher.js +56 -176
  195. package/dist/catalogIdentity.js +12 -60
  196. package/dist/cli/artifactCommands.js +49 -77
  197. package/dist/cli/coreAnalysisCommands.js +83 -133
  198. package/dist/cli/javascriptApplicationAnalysis.js +1 -9
  199. package/dist/cli/managedCommands.js +6 -271
  200. package/dist/cli/setupCommands.js +3 -12
  201. package/dist/cli/utilityCommands.js +7 -41
  202. package/dist/cli.js +0 -2
  203. package/dist/cliApplicationCommands.js +44 -114
  204. package/dist/cliBrowserAdvancedCommands.js +12 -102
  205. package/dist/cliBrowserCommands.js +19 -124
  206. package/dist/cliBrowserContext.js +30 -0
  207. package/dist/cliCommandNames.js +5 -5
  208. package/dist/cliElectronCommands.js +49 -71
  209. package/dist/cliEvidenceCommands.js +8 -77
  210. package/dist/cliJavaScriptRuntimeCommands.js +18 -92
  211. package/dist/cliJsonInput.js +4 -14
  212. package/dist/cliObservationOptions.js +11 -92
  213. package/dist/cliPolicyCommands.js +2 -16
  214. package/dist/cliProcessCommands.js +3 -3
  215. package/dist/cliSetup.js +0 -13
  216. package/dist/config/browserScenario.js +77 -0
  217. package/dist/config/electronAutomation.js +35 -0
  218. package/dist/config/environment.js +6 -9
  219. package/dist/config/javascriptReplay.js +41 -0
  220. package/dist/config/managedRuntime.js +25 -0
  221. package/dist/config/parseConfig.js +56 -232
  222. package/dist/config/parsers.js +16 -28
  223. package/dist/config/passiveObservation.js +87 -0
  224. package/dist/config/permissions.js +0 -7
  225. package/dist/config/processCapture.js +47 -0
  226. package/dist/contracts/analysisSearchContract.js +2 -5
  227. package/dist/contracts/applicationToolContracts.js +58 -114
  228. package/dist/contracts/applicationWorkflowInputContracts.js +29 -114
  229. package/dist/contracts/artifactComparisonExample.js +58 -60
  230. package/dist/contracts/artifactToolContracts.js +37 -91
  231. package/dist/contracts/browserScenarioToolContracts.js +6 -51
  232. package/dist/contracts/browserToolContracts.js +10 -75
  233. package/dist/contracts/electronToolContracts.js +27 -98
  234. package/dist/contracts/enhancedInputs.js +31 -78
  235. package/dist/contracts/errorSchemas.js +0 -1
  236. package/dist/contracts/functionComparisonExample.js +10 -24
  237. package/dist/contracts/functionInstructionContract.js +1 -3
  238. package/dist/contracts/functionWorkflowToolContracts.js +4 -5
  239. package/dist/contracts/hopperMemoryContracts.js +3 -3
  240. package/dist/contracts/investigationExamples.js +14 -11
  241. package/dist/contracts/javascriptApplicationWorkflowExamples.js +12 -19
  242. package/dist/contracts/javascriptRuntimeObservationToolContracts.js +2 -20
  243. package/dist/contracts/javascriptRuntimeReconciliationExample.js +45 -12
  244. package/dist/contracts/managedToolContracts.js +10 -104
  245. package/dist/contracts/managedWorkflowExamples.js +77 -125
  246. package/dist/contracts/managedWorkflowToolContracts.js +51 -74
  247. package/dist/contracts/nativeToolContracts.js +9 -14
  248. package/dist/contracts/processCaptureExample.js +2 -69
  249. package/dist/contracts/promptContracts.js +49 -67
  250. package/dist/contracts/providerSelection.js +0 -1
  251. package/dist/contracts/reconstructionReadinessExample.js +1 -6
  252. package/dist/contracts/sessionStatusContract.js +1 -17
  253. package/dist/contracts/sessionToolSchemas.js +52 -0
  254. package/dist/contracts/toolContractExamples.js +11 -10
  255. package/dist/contracts/toolContractHelpers.js +19 -0
  256. package/dist/contracts/toolContracts.js +60 -143
  257. package/dist/contracts/toolEffects.js +16 -9
  258. package/dist/contracts/toolOutputSchemaGroups.js +47 -86
  259. package/dist/contracts/toolOutputSchemaPrimitives.js +72 -62
  260. package/dist/contracts/toolSchemaMetadata.js +117 -0
  261. package/dist/contracts/unknownContractExamples.js +0 -2
  262. package/dist/doctorRuntime.js +1 -1
  263. package/dist/domain/analysisErrorPresentation.js +46 -54
  264. package/dist/domain/analysisErrorProjection.js +28 -37
  265. package/dist/domain/analysisProfile.js +3 -31
  266. package/dist/domain/analysisSnapshot.js +3 -12
  267. package/dist/domain/androidApplication.js +15 -52
  268. package/dist/domain/appleApplication.js +24 -65
  269. package/dist/domain/artifactComparison.js +11 -29
  270. package/dist/domain/artifactGraph.js +14 -44
  271. package/dist/domain/artifactInspection.js +38 -69
  272. package/dist/domain/artifactInventoryEvidence.js +27 -21
  273. package/dist/domain/binaryTarget.js +2 -219
  274. package/dist/domain/binaryTargetTypes.js +1 -0
  275. package/dist/domain/browserCaptureComparison.js +35 -60
  276. package/dist/domain/browserObservation.js +45 -197
  277. package/dist/domain/browserObservationSchemas.js +5 -23
  278. package/dist/domain/browserScenario.js +11 -14
  279. package/dist/domain/browserScenarioCapture.js +11 -12
  280. package/dist/domain/browserScenarioCaptureValues.js +146 -84
  281. package/dist/domain/browserScenarioDiff.js +2 -59
  282. package/dist/domain/browserScenarioDiffEvidence.js +51 -0
  283. package/dist/domain/browserScenarioDiffValues.js +21 -38
  284. package/dist/domain/browserScenarioValues.js +80 -109
  285. package/dist/domain/browserSession.js +4 -7
  286. package/dist/domain/bundleComparison.js +6 -32
  287. package/dist/domain/bytecodeProvider.js +53 -54
  288. package/dist/domain/callPath.js +50 -169
  289. package/dist/domain/callPathSchemas.js +79 -0
  290. package/dist/domain/changedBehavior.js +34 -60
  291. package/dist/domain/completionLedgerGeneration.js +8 -14
  292. package/dist/domain/conformancePackage.js +126 -97
  293. package/dist/domain/conformanceReplay.js +39 -11
  294. package/dist/domain/conformanceTrustGate.js +174 -30
  295. package/dist/domain/customProtocolCapture.js +4 -4
  296. package/dist/domain/electronActiveObservation.js +244 -0
  297. package/dist/domain/electronObservation.js +21 -83
  298. package/dist/domain/electronStaticAnalysisBrowser.js +36 -46
  299. package/dist/domain/electronStaticAnalysisIpc.js +38 -14
  300. package/dist/domain/electronStaticAnalysisNative.js +1 -8
  301. package/dist/domain/electronStaticAnalysisValues.js +14 -18
  302. package/dist/domain/errors.js +33 -54
  303. package/dist/domain/eventProcessTree.js +101 -90
  304. package/dist/domain/evidence.js +2 -10
  305. package/dist/domain/evidenceBundle.js +3 -5
  306. package/dist/domain/evidenceCompletionLedger.js +6 -8
  307. package/dist/domain/functionComparison.js +4 -14
  308. package/dist/domain/functionComparisonNormalization.js +8 -8
  309. package/dist/domain/functionComparisonResults.js +25 -15
  310. package/dist/domain/functionComparisonSchemas.js +49 -33
  311. package/dist/domain/functionDossierEvidence.js +31 -151
  312. package/dist/domain/hopperStartupFailure.js +1 -1
  313. package/dist/domain/hopperValues.js +17 -141
  314. package/dist/domain/inputIssueProjection.js +4 -1
  315. package/dist/domain/interfaceBuilderGraph.js +654 -0
  316. package/dist/domain/javascriptApplicationAnalysis.js +8 -112
  317. package/dist/domain/javascriptApplicationChangeGraph.js +22 -82
  318. package/dist/domain/javascriptApplicationEvidenceSchemas.js +59 -47
  319. package/dist/domain/javascriptApplicationGraph.js +3 -13
  320. package/dist/domain/javascriptApplicationGraphSchemas.js +12 -34
  321. package/dist/domain/javascriptApplicationVersionComparison.js +26 -30
  322. package/dist/domain/javascriptApplicationVersionComparisonSchemas.js +123 -68
  323. package/dist/domain/javascriptApplicationVersionItems.js +120 -53
  324. package/dist/domain/javascriptApplicationVersionKeys.js +24 -11
  325. package/dist/domain/javascriptAstFingerprint.js +25 -58
  326. package/dist/domain/javascriptAstValues.js +9 -0
  327. package/dist/domain/javascriptExportInstrumentation.js +2 -4
  328. package/dist/domain/javascriptExportShapeComparison.js +6 -7
  329. package/dist/domain/javascriptExportShapeComparisonSchemas.js +70 -77
  330. package/dist/domain/javascriptExportShapeSelection.js +17 -19
  331. package/dist/domain/javascriptFeatureSeed.js +20 -12
  332. package/dist/domain/javascriptFeatureTrace.js +13 -67
  333. package/dist/domain/javascriptFeatureTraceSchemas.js +24 -52
  334. package/dist/domain/javascriptFeatureTraversal.js +1 -44
  335. package/dist/domain/javascriptNativeHandoff.js +1 -1
  336. package/dist/domain/javascriptReplay.js +100 -101
  337. package/dist/domain/javascriptRuntimeLoadState.js +3 -8
  338. package/dist/domain/javascriptRuntimeObservation.js +43 -103
  339. package/dist/domain/javascriptRuntimeReconciliation.js +1 -3
  340. package/dist/domain/javascriptRuntimeReconciliationActive.js +80 -0
  341. package/dist/domain/javascriptRuntimeReconciliationGraph.js +21 -33
  342. package/dist/domain/javascriptRuntimeReconciliationMatching.js +75 -61
  343. package/dist/domain/javascriptRuntimeReconciliationParsing.js +21 -46
  344. package/dist/domain/javascriptRuntimeReconciliationResult.js +25 -19
  345. package/dist/domain/javascriptRuntimeReconciliationRuntime.js +8 -12
  346. package/dist/domain/javascriptRuntimeReconciliationSchemas.js +34 -49
  347. package/dist/domain/javascriptRuntimeStaticCandidates.js +3 -3
  348. package/dist/domain/javascriptSemanticAnalysis.js +12 -45
  349. package/dist/domain/javascriptSemanticAsyncEffects.js +1 -9
  350. package/dist/domain/javascriptSemanticCallResolution.js +6 -16
  351. package/dist/domain/javascriptSemanticCalls.js +5 -32
  352. package/dist/domain/javascriptSemanticChildProcesses.js +1 -11
  353. package/dist/domain/javascriptSemanticCoverage.js +11 -0
  354. package/dist/domain/javascriptSemanticDataEffectHelpers.js +1 -8
  355. package/dist/domain/javascriptSemanticDataEffects.js +1 -11
  356. package/dist/domain/javascriptSemanticFingerprints.js +3 -5
  357. package/dist/domain/javascriptSemanticGraphSchemas.js +25 -51
  358. package/dist/domain/javascriptSemanticGraphSerialization.js +2 -13
  359. package/dist/domain/javascriptSemanticIr.js +1 -29
  360. package/dist/domain/javascriptSemanticObjects.js +1 -5
  361. package/dist/domain/javascriptSemanticPrimitives.js +2 -9
  362. package/dist/domain/javascriptSemanticProjection.js +0 -18
  363. package/dist/domain/javascriptSemanticPromises.js +9 -16
  364. package/dist/domain/javascriptSemanticProvenance.js +16 -19
  365. package/dist/domain/javascriptSemanticQuery.js +17 -139
  366. package/dist/domain/javascriptSemanticQueryAssessment.js +9 -37
  367. package/dist/domain/javascriptSemanticQueryIdentity.js +2 -23
  368. package/dist/domain/javascriptSemanticQuerySchemas.js +14 -107
  369. package/dist/domain/javascriptSemanticResources.js +1 -6
  370. package/dist/domain/javascriptSemanticReturns.js +10 -27
  371. package/dist/domain/javascriptSemanticValueTypes.js +1 -0
  372. package/dist/domain/javascriptSemanticValues.js +44 -62
  373. package/dist/domain/javascriptStaticAnalysis.js +21 -43
  374. package/dist/domain/javascriptStaticAnalysisBundler.js +34 -93
  375. package/dist/domain/javascriptStaticAnalysisCalls.js +17 -16
  376. package/dist/domain/javascriptStaticAnalysisFindings.js +3 -19
  377. package/dist/domain/javascriptStaticAnalysisHelpers.js +47 -88
  378. package/dist/domain/javascriptStaticAnalysisState.js +1 -5
  379. package/dist/domain/javascriptStaticAnalysisTypes.js +1 -0
  380. package/dist/domain/jsonShape.js +7 -33
  381. package/dist/domain/localPath.js +7 -0
  382. package/dist/domain/managedApplicationGraph.js +9 -41
  383. package/dist/domain/managedApplicationGraphCoverage.js +24 -156
  384. package/dist/domain/managedApplicationGraphNodes.js +10 -13
  385. package/dist/domain/managedArtifact.js +14 -27
  386. package/dist/domain/managedMemberComparison.js +90 -92
  387. package/dist/domain/managedMemberComparisonCoverage.js +11 -33
  388. package/dist/domain/managedMemberComparisonItems.js +221 -0
  389. package/dist/domain/managedMemberComparisonMatch.js +8 -208
  390. package/dist/domain/managedNativeVerification.js +3 -6
  391. package/dist/domain/managedNativeVerificationMatch.js +55 -59
  392. package/dist/domain/managedNativeVerificationSchemas.js +83 -47
  393. package/dist/domain/managedReconstruction.js +19 -23
  394. package/dist/domain/managedRuntimeCorrelation.js +6 -9
  395. package/dist/domain/nativeApiBoundary.js +17 -14
  396. package/dist/domain/nativeInspection.js +0 -2
  397. package/dist/domain/nativeInvestigationGraph.js +351 -0
  398. package/dist/domain/nativeValueFlow.js +61 -0
  399. package/dist/domain/nodeRuntimeCharacterization.js +15 -18
  400. package/dist/domain/objcSwiftMetadata.js +254 -0
  401. package/dist/domain/peInspection.js +1 -1
  402. package/dist/domain/permissionPolicy.js +13 -0
  403. package/dist/domain/processCapture.js +76 -113
  404. package/dist/domain/processCaptureExample.js +68 -0
  405. package/dist/domain/processCaptureParsing.js +21 -0
  406. package/dist/domain/processCaptureReactiveSchema.js +68 -0
  407. package/dist/domain/processCaptureReactiveValidation.js +8 -3
  408. package/dist/domain/processCaptureValidation.js +8 -10
  409. package/dist/domain/processComparison.js +12 -16
  410. package/dist/domain/processObservation.js +5 -6
  411. package/dist/domain/processReactiveMatching.js +32 -46
  412. package/dist/domain/processReactiveRuntime.js +4 -8
  413. package/dist/domain/processReactiveScenario.js +28 -94
  414. package/dist/domain/processReactiveScenarioPreflight.js +5 -30
  415. package/dist/domain/processReactiveTransition.js +42 -21
  416. package/dist/domain/processScenario.js +62 -93
  417. package/dist/domain/processTraceComparison.js +0 -7
  418. package/dist/domain/processTraceEvaluation.js +14 -4
  419. package/dist/domain/processTraceSpecification.js +11 -17
  420. package/dist/domain/protocolCapture.js +11 -9
  421. package/dist/domain/reconstructionCoverage.js +62 -129
  422. package/dist/domain/reconstructionCoverageEvaluation.js +17 -17
  423. package/dist/domain/reconstructionObligationLedgerSchemas.js +45 -72
  424. package/dist/domain/reconstructionReadiness.js +1 -2
  425. package/dist/domain/reconstructionReadinessSchemas.js +66 -40
  426. package/dist/domain/reconstructionUnknowns.js +3 -3
  427. package/dist/domain/reconstructionVerification.js +13 -47
  428. package/dist/domain/reconstructionVerificationSchemas.js +50 -38
  429. package/dist/domain/referenceSourceGraph.js +53 -61
  430. package/dist/domain/referenceSourceImportParsing.js +3 -7
  431. package/dist/domain/replayMachine.js +19 -31
  432. package/dist/domain/replayMachineRun.js +15 -63
  433. package/dist/domain/replayMachineRuntime.js +46 -44
  434. package/dist/domain/replayMachineValues.js +84 -0
  435. package/dist/domain/residualUnknown.js +25 -30
  436. package/dist/domain/runtimeCharacterization.js +15 -16
  437. package/dist/domain/runtimeIdentification.js +48 -47
  438. package/dist/domain/sourceToBundleComparison.js +11 -87
  439. package/dist/domain/sourceToBundleComparisonSchemas.js +25 -50
  440. package/dist/domain/sourceToBundleSignals.js +11 -16
  441. package/dist/domain/staticRuntimeCorrelation.js +44 -54
  442. package/dist/domain/symbolAnalysis.js +10 -19
  443. package/dist/domain/unicodeCodePointOrder.js +12 -0
  444. package/dist/domain/webBundleAnalysis.js +70 -99
  445. package/dist/domain/webBundleAnalyzer.js +2 -4
  446. package/dist/domain/webBundleAnalyzerAst.js +0 -13
  447. package/dist/domain/webBundleAnalyzerInspection.js +26 -52
  448. package/dist/domain/webBundleAnalyzerResult.js +7 -24
  449. package/dist/domain/webCaptureDiff.js +48 -85
  450. package/dist/domain/webCaptureDiffSchemas.js +86 -0
  451. package/dist/domain/webContentArtifact.js +1 -10
  452. package/dist/domain/webMcpDiscovery.js +3 -14
  453. package/dist/domain/webScreenshot.js +58 -34
  454. package/dist/domain/zipPackageFormat.js +7 -0
  455. package/dist/dotnet/ManagedArtifactInspector.js +17 -50
  456. package/dist/dotnet/ManagedMemberInspector.js +27 -58
  457. package/dist/dotnet/ManagedMemberInspectorCore.js +14 -51
  458. package/dist/dotnet/ManagedMemberInstructionDecoder.js +2 -2
  459. package/dist/dotnet/ManagedMemberRows.js +16 -16
  460. package/dist/dotnet/ManagedMetadataHeaps.js +26 -8
  461. package/dist/dotnet/ManagedMetadataInventory.js +21 -30
  462. package/dist/dotnet/ManagedMetadataInventoryRows.js +57 -63
  463. package/dist/dotnet/ManagedMetadataLayout.js +3 -5
  464. package/dist/dotnet/ManagedMethodBodyReader.js +5 -30
  465. package/dist/dotnet/ManagedNativeBoundaryHelpers.js +19 -49
  466. package/dist/dotnet/ManagedNativeBoundaryInspector.js +13 -42
  467. package/dist/dotnet/ManagedPeReader.js +2 -2
  468. package/dist/dotnet/ManagedStaticProvider.js +13 -71
  469. package/dist/generatedMcpToolCatalog.js +1 -1
  470. package/dist/generatedPackageMetadata.js +1 -1
  471. package/dist/ghidra/GhidraAnalysisProfile.js +3 -8
  472. package/dist/ghidra/GhidraClient.js +5 -13
  473. package/dist/ghidra/GhidraClientStartup.js +1 -1
  474. package/dist/ghidra/GhidraClientWire.js +9 -5
  475. package/dist/ghidra/GhidraDefaults.js +0 -18
  476. package/dist/ghidra/GhidraDiagnostics.js +0 -2
  477. package/dist/ghidra/GhidraDoctor.js +16 -12
  478. package/dist/ghidra/GhidraFunctionValues.js +67 -108
  479. package/dist/ghidra/GhidraInstallation.js +98 -42
  480. package/dist/ghidra/GhidraInventoryValues.js +18 -77
  481. package/dist/ghidra/GhidraLauncher.js +0 -8
  482. package/dist/ghidra/GhidraProvider.js +32 -31
  483. package/dist/ghidra/GhidraProviderCapabilities.js +11 -48
  484. package/dist/ghidra/GhidraRequestQueue.js +6 -30
  485. package/dist/ghidra/GhidraResponseBuffer.js +1 -7
  486. package/dist/ghidra/GhidraSessionValues.js +0 -2
  487. package/dist/ghidra/GhidraSocketConnection.js +1 -1
  488. package/dist/ghidra/GhidraTransport.js +4 -7
  489. package/dist/ghidra/protocol.js +19 -42
  490. package/dist/hopper/BridgeLauncher.js +115 -37
  491. package/dist/hopper/HopperAnalysisProfile.js +3 -5
  492. package/dist/hopper/HopperCleanup.js +11 -9
  493. package/dist/hopper/HopperClient.js +5 -8
  494. package/dist/hopper/HopperProcessDiagnostic.js +2 -2
  495. package/dist/hopper/HopperProvider.js +0 -30
  496. package/dist/hopper/HopperRequestQueue.js +21 -40
  497. package/dist/hopper/HopperResponseStream.js +1 -9
  498. package/dist/hopper/HopperSessionValues.js +3 -2
  499. package/dist/hopper/HopperTargetLease.js +119 -0
  500. package/dist/hopper/LinuxPrivateDisplayDiagnostic.js +24 -31
  501. package/dist/hopper/LinuxPrivateDisplayProbe.js +21 -26
  502. package/dist/hopper/protocol.js +6 -4
  503. package/dist/main/reload.js +1 -9
  504. package/dist/main/shutdown.js +1 -1
  505. package/dist/main/state.js +0 -23
  506. package/dist/main/transport.js +27 -39
  507. package/dist/main.js +17 -15
  508. package/dist/mcpDoctor.js +27 -69
  509. package/dist/native/CommandRunner.js +18 -25
  510. package/dist/native/NativeMacOSProvider.js +13 -38
  511. package/dist/native/NativeMachoInspection.js +1 -1
  512. package/dist/process/BoundedFileBytes.js +17 -0
  513. package/dist/process/ExecFileOutput.js +11 -0
  514. package/dist/process/PendingOperations.js +8 -6
  515. package/dist/process/PrivateRuntimeRoot.js +17 -0
  516. package/dist/process/ProcessOwnership.js +67 -130
  517. package/dist/process/ProcessOwnershipIdentity.js +13 -0
  518. package/dist/process/ProcessOwnershipObservation.js +87 -0
  519. package/dist/process/ProcessOwnershipProcessTree.js +22 -0
  520. package/dist/process/ProviderDeadline.js +8 -12
  521. package/dist/process/ProviderProcess.js +7 -28
  522. package/dist/process/WindowsAuthority.js +32 -0
  523. package/dist/reference/ReferenceSourceReader.js +8 -24
  524. package/dist/reference/ReferenceSourceReaderEntries.js +11 -39
  525. package/dist/reference/ReferenceSourceReaderFile.js +13 -31
  526. package/dist/reference/ReferenceSourceReaderPaths.js +3 -18
  527. package/dist/reference/ReferenceSourceReaderValidate.js +3 -6
  528. package/dist/replay/JavaScriptReplayWorker.js +95 -13
  529. package/dist/replay/JavaScriptReplayWorkerTypes.js +1 -0
  530. package/dist/replay/LinuxJavaScriptReplayRunner.js +42 -43
  531. package/dist/replay/LinuxJavaScriptReplaySandbox.js +0 -19
  532. package/dist/replay/LinuxRuntimeClosure.js +1 -3
  533. package/dist/replay/ReplayOutcome.js +27 -18
  534. package/dist/replay/ReplayProcessLifecycle.js +32 -7
  535. package/dist/replay/ReplaySeccompFile.js +29 -0
  536. package/dist/replay/ReplayWorkerProtocol.js +33 -30
  537. package/dist/replay/SystemJavaScriptReplayHost.js +45 -74
  538. package/dist/server/ProcessCaptureElicitation.js +4 -8
  539. package/dist/server/createServer.js +145 -119
  540. package/dist/server/mcpClientMetadata.js +32 -0
  541. package/dist/server/promptCompletion.js +37 -61
  542. package/dist/server/recordDerivedEvidence.js +1 -1
  543. package/dist/server/registerApplicationTools/characterization.js +10 -21
  544. package/dist/server/registerApplicationTools/compareExportShapes.js +6 -16
  545. package/dist/server/registerApplicationTools/compareSourceToBundle.js +6 -15
  546. package/dist/server/registerApplicationTools/compareVersions.js +6 -16
  547. package/dist/server/registerApplicationTools/controlledReplay.js +8 -15
  548. package/dist/server/registerApplicationTools/coverage.js +7 -78
  549. package/dist/server/registerApplicationTools/helpers.js +1 -13
  550. package/dist/server/registerApplicationTools/obligationLedger.js +4 -8
  551. package/dist/server/registerApplicationTools/traceFeature.js +6 -15
  552. package/dist/server/registerApplicationTools/traceSemantics.js +5 -13
  553. package/dist/server/registerApplicationTools.js +0 -2
  554. package/dist/server/registerArtifactComparisonTool.js +27 -35
  555. package/dist/server/registerBrowserScenarioTool.js +3 -8
  556. package/dist/server/registerBrowserTools.js +36 -81
  557. package/dist/server/registerBundleComparisonTool.js +10 -16
  558. package/dist/server/registerCloseLifecycleTool.js +5 -27
  559. package/dist/server/registerElectronTools.js +29 -65
  560. package/dist/server/registerEnhancedTools.js +118 -127
  561. package/dist/server/registerEvidenceTools.js +19 -30
  562. package/dist/server/registerFunctionComparisonTool.js +35 -34
  563. package/dist/server/registerInvestigationTools/helpers.js +3 -32
  564. package/dist/server/registerInvestigationTools.js +36 -148
  565. package/dist/server/registerJavaScriptRuntimeObservationTools.js +15 -27
  566. package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +16 -23
  567. package/dist/server/registerManagedWorkflowTools/contract.js +2 -3
  568. package/dist/server/registerManagedWorkflowTools/evidence.js +19 -35
  569. package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +4 -14
  570. package/dist/server/registerManagedWorkflowTools/planManagedRuntimeCorrelation.js +4 -14
  571. package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +11 -20
  572. package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +10 -21
  573. package/dist/server/registerOfficialTools.js +8 -51
  574. package/dist/server/registerProcessComparisonTool.js +43 -38
  575. package/dist/server/registerPrompts.js +19 -17
  576. package/dist/server/registerReplayMachineTool.js +4 -10
  577. package/dist/server/registerSessionRecordTools.js +36 -153
  578. package/dist/server/registerSessionStatusTool.js +18 -96
  579. package/dist/server/registerSessionTools.js +34 -91
  580. package/dist/server/sessionAvailabilityPolicy.js +2 -3
  581. package/dist/server/sessionEvidence.js +9 -15
  582. package/dist/server/sessionToolPolicies.js +1 -13
  583. package/dist/server/toolRegistrationOptions.js +4 -192
  584. package/dist/server/toolResult.js +15 -67
  585. package/dist/serverIdentity.js +0 -20
  586. package/install.sh +1 -1
  587. package/package.json +27 -15
  588. package/scripts/electron-active-hook-boundaries.cjs +394 -0
  589. package/scripts/electron-active-hook.cjs +469 -0
  590. package/scripts/hopper-demo-x11.py +13 -32
  591. package/scripts/rea.mjs +1 -11
  592. package/skills/reverse-engineer-anything/SKILL.md +46 -11
  593. package/skills/reverse-engineer-anything/references/evidence-workflows.md +6 -4
  594. package/skills/reverse-engineer-anything/references/javascript-applications.md +13 -13
  595. package/skills/reverse-engineer-anything/references/native-and-artifacts.md +12 -8
  596. package/dist/application/ApplicationWorkflowEvidenceResolver.js +0 -180
  597. package/dist/application/BoundedJsonFiles.js +0 -86
  598. package/dist/application/CrossVersionInventory.js +0 -128
  599. package/dist/application/CrossVersionInvestigation.js +0 -301
  600. package/dist/application/CrossVersionInvestigationCollections.js +0 -23
  601. package/dist/application/CrossVersionInvestigationEvidence.js +0 -64
  602. package/dist/application/CrossVersionInvestigationReplay.js +0 -170
  603. package/dist/application/DeferredFileAuthorization.js +0 -61
  604. package/dist/application/DoctorProjection.js +0 -43
  605. package/dist/application/EnhancedToolPagination.js +0 -22
  606. package/dist/application/EvidenceReferenceResolver.js +0 -26
  607. package/dist/application/InvestigationWorkspaceStore.js +0 -204
  608. package/dist/application/ProcessPairedExperiment.js +0 -72
  609. package/dist/application/ReconstructionCoverageWorkspaceStore.js +0 -31
  610. package/dist/application/ReconstructionReadinessService.js +0 -48
  611. package/dist/cliInvestigationCommands.js +0 -173
  612. package/dist/domain/boundedCartesianProjection.js +0 -15
  613. package/dist/domain/investigationWorkspace.js +0 -346
  614. package/dist/domain/jsonLimits.js +0 -26
  615. package/dist/domain/knownPageCoverage.js +0 -21
  616. package/dist/domain/processPairedExperiment.js +0 -128
  617. package/dist/server/DynamicToolAvailability.js +0 -70
  618. package/dist/server/LazyToolCatalog.js +0 -134
  619. package/dist/server/hydrateServerTools.js +0 -191
  620. package/dist/server/javascriptApplicationResult.js +0 -106
  621. package/dist/server/permissionFailure.js +0 -12
  622. package/dist/server/registerApplicationTools/readiness.js +0 -55
  623. package/dist/server/registerEvidenceResources.js +0 -315
  624. package/dist/server/registerJavaScriptApplicationGraphResource.js +0 -65
  625. package/dist/server/registerReconstructionObligationLedgerResource.js +0 -32
  626. package/dist/server/registerReconstructionReadinessResource.js +0 -32
  627. package/dist/server/toolInputValidation.js +0 -77
  628. package/scripts/package-runner-bootstrap.mjs +0 -72
@@ -1,168 +1,68 @@
1
1
  import { DirectedGraph } from "graphology";
2
2
  import { bidirectional } from "graphology-shortest-path/unweighted.js";
3
- import { z } from "zod";
4
- import { evidenceSchema } from "./evidence.js";
3
+ import { callPathInputSchema, callPathResultSchema, parseCallPathAddress, } from "./callPathSchemas.js";
5
4
  import { parseFunctionEvidence, } from "./functionDossierEvidence.js";
6
- const addressSchema = z.string().regex(/^0x(?:0|[1-9a-f][0-9a-f]*)$/u);
7
- const inputAddressSchema = z
8
- .string()
9
- .regex(/^0[xX][0-9a-fA-F]+$/u)
10
- .transform((address) => `0x${BigInt(address).toString(16)}`);
11
- const evidenceIdSchema = z.string().regex(/^ev_[a-f0-9]{64}$/u);
12
- const evidenceGroupSchema = z.union([
13
- evidenceSchema,
14
- z.array(evidenceSchema).min(1).max(100),
15
- ]);
16
- const MAX_EVIDENCE_PAGES = 2_000;
17
- const MAX_GRAPH_EDGES = 10_000;
18
- const MAX_PATH_EXPANSIONS = 100_000;
19
- /** Strict, bounded input for explicit call-path reconstruction. */
20
- export const callPathInputSchema = z
21
- .object({
22
- functions: z.array(evidenceGroupSchema).min(1).max(500),
23
- start: z.object({ address: inputAddressSchema }).strict(),
24
- goal: z.object({ address: inputAddressSchema }).strict(),
25
- max_depth: z.number().int().min(0).max(32).default(8),
26
- max_paths: z.number().int().min(1).max(100).default(10),
27
- offset: z.number().int().min(0).default(0),
28
- limit: z.number().int().min(1).max(100).default(100),
29
- unknown_registry_approved: z.literal(true).optional(),
30
- })
31
- .superRefine(({ functions }, context) => {
32
- const pages = functions.reduce((total, group) => total + (Array.isArray(group) ? group.length : 1), 0);
33
- if (pages > MAX_EVIDENCE_PAGES)
34
- context.addIssue({
35
- code: "custom",
36
- message: `Call-path Evidence exceeds ${MAX_EVIDENCE_PAGES} pages`,
37
- path: ["functions"],
38
- });
39
- });
40
- const citedNodeSchema = z.object({
41
- address: addressSchema,
42
- name: z.string().nullable(),
43
- evidence_links: z.array(evidenceIdSchema).min(1).max(100),
44
- });
45
- const citedEdgeSchema = z.object({
46
- source: addressSchema,
47
- target: addressSchema,
48
- evidence_links: z.array(evidenceIdSchema).min(1).max(100),
49
- });
50
- const pathSchema = z.object({
51
- hops: z.number().int().min(0),
52
- nodes: z.array(citedNodeSchema).min(1).max(33),
53
- edges: z.array(citedEdgeSchema).max(32),
54
- evidence_links: z.array(evidenceIdSchema).min(1).max(3_300),
55
- });
56
- /** Evidence-cited, bounded directed call-path result. */
57
- export const callPathResultSchema = z.object({
58
- status: z.enum(["found", "not_found", "unknown", "truncated"]),
59
- start: addressSchema,
60
- goal: addressSchema,
61
- shortest_hops: z.number().int().min(0).nullable(),
62
- search_scope: z.object({
63
- max_depth: z.number().int().min(0).max(32),
64
- max_paths: z.number().int().min(1).max(100),
65
- exhaustive: z.boolean(),
66
- }),
67
- explored: z.object({
68
- nodes: z.number().int().min(0),
69
- edges: z.number().int().min(0),
70
- depth_reached: z.number().int().min(0),
71
- }),
72
- paths: z.object({
73
- items: z.array(pathSchema).max(100),
74
- offset: z.number().int().min(0),
75
- limit: z.number().int().min(1).max(100),
76
- total: z.number().int().min(0).nullable(),
77
- returned: z.number().int().min(0).max(100),
78
- truncated: z.boolean(),
79
- lower_bound: z.number().int().min(0),
80
- next_offset: z.number().int().min(0).nullable(),
81
- }),
82
- evidence_links: z.array(evidenceIdSchema).min(1).max(50_000),
83
- limitations: z.array(z.string()),
84
- });
85
- /** Reconstruct bounded direct-callee paths from explicit analyze_function Evidence. */
5
+ export { callPathInputSchema, callPathResultSchema };
6
+ /** Reconstruct direct-callee paths from explicit analyze_function Evidence. */
86
7
  export const buildCallPath = (input) => {
87
8
  const parsed = callPathInputSchema.parse(input);
88
- const snapshots = parseSnapshots(parsed.functions);
89
- assertCompatible(snapshots);
90
- if (!snapshots.has(parsed.start.address))
91
- throw new TypeError(`No analyze_function Evidence was supplied for start ${parsed.start.address}`);
92
- const graph = createGraph(snapshots);
9
+ const { snapshots, graph } = prepareCallGraph(parsed);
93
10
  const search = inspectSearch({
94
11
  graph,
95
12
  snapshots,
96
13
  start: parsed.start.address,
97
14
  goal: parsed.goal.address,
98
- maxDepth: parsed.max_depth,
99
15
  });
100
16
  const shortest = graph.hasNode(parsed.start.address) && graph.hasNode(parsed.goal.address)
101
17
  ? bidirectional(graph, parsed.start.address, parsed.goal.address)
102
18
  : null;
103
- const enumeration = shortest === null || shortest.length - 1 > parsed.max_depth
104
- ? { paths: [], budgetExhausted: false }
19
+ const paths = shortest === null
20
+ ? []
105
21
  : enumeratePaths({
106
22
  graph,
107
23
  start: parsed.start.address,
108
24
  goal: parsed.goal.address,
109
25
  shortestDepth: shortest.length - 1,
110
- maxDepth: parsed.max_depth,
111
- limit: parsed.max_paths + 1,
112
- });
113
- const hasKnownExtraPath = enumeration.paths.length > parsed.max_paths;
114
- const capped = hasKnownExtraPath || enumeration.budgetExhausted;
115
- const retained = enumeration.paths.slice(0, parsed.max_paths);
116
- const paths = retained.map((path) => citePath(path, snapshots));
117
- const total = paths.length;
118
- const items = paths.slice(parsed.offset, parsed.offset + parsed.limit);
119
- const found = paths.length > 0;
120
- const exhaustive = search.exhaustive && !capped;
121
- const status = callPathStatus({ capped, found, exhaustive });
122
- const limitations = [...search.limitations];
123
- if (capped)
124
- limitations.push(enumeration.budgetExhausted
125
- ? `Path enumeration stopped at ${MAX_PATH_EXPANSIONS} expansions`
126
- : `Path enumeration stopped at max_paths=${parsed.max_paths}`);
127
- if (!found && shortest !== null && shortest.length - 1 > parsed.max_depth)
128
- limitations.push(`The shortest observed path exceeds max_depth=${parsed.max_depth}`);
129
- return callPathResultSchema.parse({
130
- status,
26
+ }).paths.map((path) => citePath(path, snapshots));
27
+ const shortestHops = paths[0]?.hops;
28
+ const found = shortestHops !== undefined;
29
+ const exhaustive = search.exhaustive;
30
+ const limitations = search.limitations;
31
+ const resultContext = {
131
32
  start: parsed.start.address,
132
33
  goal: parsed.goal.address,
133
- shortest_hops: found ? (paths[0]?.hops ?? null) : null,
134
- search_scope: {
135
- max_depth: parsed.max_depth,
136
- max_paths: parsed.max_paths,
137
- exhaustive,
138
- },
139
- explored: {
140
- nodes: search.reached.size,
141
- edges: [...search.reached.keys()].reduce((count, node) => count + (graph.hasNode(node) ? graph.outDegree(node) : 0), 0),
142
- depth_reached: Math.max(0, ...search.reached.values()),
143
- },
144
- paths: {
145
- items,
146
- offset: parsed.offset,
147
- limit: parsed.limit,
148
- total: capped ? null : total,
149
- returned: items.length,
150
- truncated: capped,
151
- lower_bound: total + (hasKnownExtraPath ? 1 : 0),
152
- next_offset: parsed.offset + items.length < total
153
- ? parsed.offset + items.length
154
- : null,
155
- },
34
+ explored: summarizeSearch(graph, search.reached),
156
35
  evidence_links: uniqueEvidence(snapshots.values()),
157
36
  limitations: [...new Set(limitations)].sort((left, right) => left.localeCompare(right)),
37
+ };
38
+ const searchScope = { exhaustive };
39
+ if (found)
40
+ return callPathResultSchema.parse({
41
+ ...resultContext,
42
+ status: "found",
43
+ shortest_hops: shortestHops,
44
+ search_scope: searchScope,
45
+ paths,
46
+ });
47
+ return callPathResultSchema.parse({
48
+ ...resultContext,
49
+ status: exhaustive ? "not_found" : "unknown",
50
+ shortest_hops: null,
51
+ search_scope: searchScope,
52
+ paths: [],
158
53
  });
159
54
  };
160
- const callPathStatus = ({ capped, found, exhaustive, }) => {
161
- if (capped)
162
- return "truncated";
163
- if (found)
164
- return "found";
165
- return exhaustive ? "not_found" : "unknown";
55
+ const summarizeSearch = (graph, reached) => ({
56
+ nodes: reached.size,
57
+ edges: [...reached.keys()].reduce((count, node) => count + (graph.hasNode(node) ? graph.outDegree(node) : 0), 0),
58
+ depth_reached: Math.max(0, ...reached.values()),
59
+ });
60
+ const prepareCallGraph = (input) => {
61
+ const snapshots = parseSnapshots(input.functions);
62
+ assertCompatible(snapshots);
63
+ if (!snapshots.has(input.start.address))
64
+ throw new TypeError(`No analyze_function Evidence was supplied for start ${input.start.address}`);
65
+ return { snapshots, graph: createGraph(snapshots) };
166
66
  };
167
67
  const parseSnapshots = (groups) => {
168
68
  const snapshots = new Map();
@@ -178,9 +78,10 @@ const parseSnapshots = (groups) => {
178
78
  return snapshots;
179
79
  };
180
80
  const assertCompatible = (snapshots) => {
181
- const first = snapshots.values().next().value;
182
- if (first === undefined)
81
+ const firstEntry = snapshots.values().next();
82
+ if (firstEntry.done)
183
83
  return;
84
+ const first = firstEntry.value;
184
85
  for (const snapshot of snapshots.values()) {
185
86
  if (snapshot.subject.digest.sha256 !== first.subject.digest.sha256 ||
186
87
  snapshot.subject.format !== first.subject.format ||
@@ -200,13 +101,11 @@ const createGraph = (snapshots) => {
200
101
  const calleeAddress = normalizeAddress(callee.address);
201
102
  graph.mergeNode(calleeAddress);
202
103
  graph.mergeDirectedEdge(address, calleeAddress);
203
- if (graph.size > MAX_GRAPH_EDGES)
204
- throw new TypeError(`Call graph exceeds ${MAX_GRAPH_EDGES} directed edges`);
205
104
  }
206
105
  }
207
106
  return graph;
208
107
  };
209
- const inspectSearch = ({ graph, snapshots, start, goal, maxDepth, }) => {
108
+ const inspectSearch = ({ graph, snapshots, start, goal, }) => {
210
109
  if (!graph.hasNode(start))
211
110
  return {
212
111
  graph,
@@ -232,16 +131,9 @@ const inspectSearch = ({ graph, snapshots, start, goal, maxDepth, }) => {
232
131
  limitations.push(`No analyze_function Evidence covers reachable function ${node}`);
233
132
  continue;
234
133
  }
235
- if (!snapshot.collections.callees.complete)
236
- limitations.push(`Callee coverage is incomplete for reachable function ${node}`);
237
134
  const neighbors = graph
238
135
  .outNeighbors(node)
239
136
  .sort((left, right) => left.localeCompare(right));
240
- if (depth === maxDepth) {
241
- if (neighbors.length > 0)
242
- limitations.push(`Search reached max_depth=${maxDepth} at ${node}`);
243
- continue;
244
- }
245
137
  for (const neighbor of neighbors)
246
138
  if (!reached.has(neighbor)) {
247
139
  reached.set(neighbor, depth + 1);
@@ -256,7 +148,7 @@ const inspectSearch = ({ graph, snapshots, start, goal, maxDepth, }) => {
256
148
  limitations,
257
149
  };
258
150
  };
259
- const enumeratePaths = ({ graph, start, goal, shortestDepth, maxDepth, limit, }) => {
151
+ const enumeratePaths = ({ graph, start, goal, shortestDepth, }) => {
260
152
  const output = [];
261
153
  const state = {
262
154
  graph,
@@ -264,23 +156,14 @@ const enumeratePaths = ({ graph, start, goal, shortestDepth, maxDepth, limit, })
264
156
  path: [start],
265
157
  visited: new Set([start]),
266
158
  output,
267
- limit,
268
- expansions: 0,
269
- budgetExhausted: false,
270
159
  };
271
- for (let depth = shortestDepth; depth <= maxDepth && output.length < limit; depth += 1)
272
- enumerateAtDepth(state, depth);
273
- return { paths: output, budgetExhausted: state.budgetExhausted };
160
+ enumerateAtDepth(state, shortestDepth);
161
+ return { paths: output };
274
162
  };
275
163
  const enumerateAtDepth = (state, remaining) => {
276
- const { graph, goal, path, visited, output, limit } = state;
277
- state.expansions += 1;
278
- if (state.expansions > MAX_PATH_EXPANSIONS) {
279
- state.budgetExhausted = true;
280
- return;
281
- }
164
+ const { graph, goal, path, visited, output } = state;
282
165
  const current = path.at(-1);
283
- if (current === undefined || output.length >= limit)
166
+ if (current === undefined)
284
167
  return;
285
168
  if (remaining === 0) {
286
169
  if (current === goal)
@@ -299,8 +182,6 @@ const enumerateAtDepth = (state, remaining) => {
299
182
  enumerateAtDepth(state, remaining - 1);
300
183
  path.pop();
301
184
  visited.delete(neighbor);
302
- if (output.length >= limit || state.budgetExhausted)
303
- return;
304
185
  }
305
186
  };
306
187
  const citePath = (addresses, snapshots) => {
@@ -343,4 +224,4 @@ const snapshotLinks = (snapshot) => {
343
224
  const uniqueEvidence = (snapshots) => [
344
225
  ...new Set([...snapshots].flatMap((snapshot) => snapshotLinks(snapshot))),
345
226
  ].sort((left, right) => left.localeCompare(right));
346
- const normalizeAddress = (input) => inputAddressSchema.parse(input);
227
+ const normalizeAddress = (input) => parseCallPathAddress(input);
@@ -0,0 +1,79 @@
1
+ import { z } from "zod";
2
+ import { evidenceSchema } from "./evidence.js";
3
+ const addressSchema = z.string().regex(/^0x(?:0|[1-9a-f][0-9a-f]*)$/u);
4
+ const inputAddressSchema = z
5
+ .string()
6
+ .regex(/^0[xX][0-9a-fA-F]+$/u)
7
+ .transform((address) => `0x${BigInt(address).toString(16)}`);
8
+ const evidenceIdSchema = z.string().regex(/^ev_[a-f0-9]{64}$/u);
9
+ /** Parse a caller-supplied hexadecimal address into canonical form. */
10
+ export const parseCallPathAddress = (input) => inputAddressSchema.parse(input);
11
+ /** Strict input for explicit call-path reconstruction from complete dossiers. */
12
+ export const callPathInputSchema = z.object({
13
+ functions: z.array(evidenceSchema).min(1),
14
+ start: z.object({ address: inputAddressSchema }).strict(),
15
+ goal: z.object({ address: inputAddressSchema }).strict(),
16
+ });
17
+ const citedNodeSchema = z.object({
18
+ address: addressSchema,
19
+ name: z.string().nullable(),
20
+ evidence_links: z.array(evidenceIdSchema).min(1),
21
+ });
22
+ const citedEdgeSchema = z.object({
23
+ source: addressSchema,
24
+ target: addressSchema,
25
+ evidence_links: z.array(evidenceIdSchema).min(1),
26
+ });
27
+ const pathSchema = z
28
+ .object({
29
+ hops: z.number().int().min(0),
30
+ nodes: z.array(citedNodeSchema).min(1),
31
+ edges: z.array(citedEdgeSchema),
32
+ evidence_links: z.array(evidenceIdSchema).min(1),
33
+ })
34
+ .superRefine((path, context) => {
35
+ const edgesConnectNodes = path.edges.every((edge, index) => edge.source === path.nodes[index]?.address &&
36
+ edge.target === path.nodes[index + 1]?.address);
37
+ if (path.hops !== path.edges.length ||
38
+ path.nodes.length !== path.edges.length + 1 ||
39
+ !edgesConnectNodes)
40
+ context.addIssue({
41
+ code: "custom",
42
+ message: "Path hops and edges must connect the ordered nodes",
43
+ });
44
+ });
45
+ const resultContextShape = {
46
+ start: addressSchema,
47
+ goal: addressSchema,
48
+ explored: z.object({
49
+ nodes: z.number().int().min(0),
50
+ edges: z.number().int().min(0),
51
+ depth_reached: z.number().int().min(0),
52
+ }),
53
+ evidence_links: z.array(evidenceIdSchema).min(1),
54
+ limitations: z.array(z.string()),
55
+ };
56
+ /** Evidence-cited directed call-path result containing every shortest path. */
57
+ export const callPathResultSchema = z.union([
58
+ z.object({
59
+ ...resultContextShape,
60
+ status: z.literal("found"),
61
+ shortest_hops: z.number().int().min(0),
62
+ search_scope: z.object({ exhaustive: z.boolean() }),
63
+ paths: z.array(pathSchema).min(1),
64
+ }),
65
+ z.object({
66
+ ...resultContextShape,
67
+ status: z.literal("not_found"),
68
+ shortest_hops: z.null(),
69
+ search_scope: z.object({ exhaustive: z.literal(true) }),
70
+ paths: z.tuple([]),
71
+ }),
72
+ z.object({
73
+ ...resultContextShape,
74
+ status: z.literal("unknown"),
75
+ shortest_hops: z.null(),
76
+ search_scope: z.object({ exhaustive: z.literal(false) }),
77
+ paths: z.tuple([]),
78
+ }),
79
+ ]);
@@ -3,24 +3,10 @@ import { artifactComparisonResultSchema } from "./artifactComparison.js";
3
3
  import { evidenceSchema, parseEvidence } from "./evidence.js";
4
4
  import { functionComparisonResultSchema } from "./functionComparison.js";
5
5
  import { comparisonStatusSchema, deriveProcessComparisonStatus, PROCESS_COMPARISON_DIMENSIONS, processCaptureComparisonSchema, } from "./processCapture.js";
6
- import { crossVersionInvestigationInputSchema, investigationRunSummarySchema, } from "./investigationWorkspace.js";
7
6
  const evidenceIdSchema = z.string().regex(/^ev_[a-f0-9]{64}$/u);
8
- /** Strict bounded input for aggregating existing comparison Evidence. */
9
- export const changedBehaviorInputSchema = z
10
- .object({
11
- comparisons: z.array(evidenceSchema).max(100).default([]),
12
- investigation_run: crossVersionInvestigationInputSchema.optional(),
13
- offset: z.number().int().min(0).default(0),
14
- limit: z.number().int().min(1).max(100).default(100),
15
- unknown_registry_approved: z.literal(true).optional(),
16
- })
17
- .superRefine((input, context) => {
18
- if (input.comparisons.length > 0 ===
19
- (input.investigation_run !== undefined))
20
- context.addIssue({
21
- code: "custom",
22
- message: "Supply either existing comparisons or one investigation_run, but not both",
23
- });
7
+ /** Input for aggregating existing comparison Evidence. */
8
+ export const changedBehaviorInputSchema = z.object({
9
+ comparisons: z.array(evidenceSchema).default([]),
24
10
  });
25
11
  const findingSchema = z.object({
26
12
  scope: z.enum(["runtime", "protocol", "resource", "static_candidate"]),
@@ -33,11 +19,12 @@ const findingSchema = z.object({
33
19
  ]),
34
20
  status: comparisonStatusSchema,
35
21
  source_comparison_id: evidenceIdSchema,
36
- evidence_links: z.array(evidenceIdSchema).min(3).max(201),
22
+ evidence_links: z.array(evidenceIdSchema).min(3),
37
23
  limitations: z.array(z.string()),
38
24
  });
39
25
  /** Truthful aggregate: runtime observations remain separate from static candidates. */
40
- export const changedBehaviorResultSchema = z.object({
26
+ export const changedBehaviorResultSchema = z
27
+ .object({
41
28
  behavior_status: z.enum([
42
29
  "observed_changed",
43
30
  "observed_unchanged",
@@ -51,31 +38,44 @@ export const changedBehaviorResultSchema = z.object({
51
38
  unresolved: z.number().int().min(0),
52
39
  }),
53
40
  findings: z.object({
54
- items: z.array(findingSchema).max(100),
55
- offset: z.number().int().min(0),
56
- limit: z.number().int().min(1).max(100),
57
- total: z.number().int().min(0),
58
- next_offset: z.number().int().min(0).nullable(),
41
+ items: z.array(findingSchema),
59
42
  }),
60
- evidence_links: z.array(evidenceIdSchema).min(3).max(20_100),
43
+ evidence_links: z.array(evidenceIdSchema).min(3),
61
44
  limitations: z.array(z.string()),
62
- investigation_run: investigationRunSummarySchema.optional(),
45
+ })
46
+ .superRefine((result, context) => {
47
+ const summaryTotal = Object.values(result.summary).reduce((total, count) => total + count, 0);
48
+ if (summaryTotal !== result.findings.items.length)
49
+ context.addIssue({
50
+ code: "custom",
51
+ message: "Finding classification counts must equal the finding total",
52
+ path: ["summary"],
53
+ });
54
+ if ((result.behavior_status === "observed_changed" &&
55
+ result.summary.observed_changes === 0) ||
56
+ (result.behavior_status === "observed_unchanged" &&
57
+ result.summary.observed_changes > 0))
58
+ context.addIssue({
59
+ code: "custom",
60
+ message: "Observed-change status must agree with runtime findings",
61
+ path: ["behavior_status"],
62
+ });
63
63
  });
64
64
  const EXPECTED_PROVIDERS = {
65
65
  compare_process_captures: {
66
- predicates: ["rea.process-comparison/v3", "rea.process-comparison/v4"],
66
+ predicates: ["rea.process-comparison"],
67
67
  id: "rea-process",
68
68
  name: "REA deterministic process harness",
69
69
  version: "3",
70
70
  },
71
71
  compare_artifacts: {
72
- predicates: ["rea.artifact-comparison/v1"],
72
+ predicates: ["rea.artifact-comparison"],
73
73
  id: "rea-artifact-comparison",
74
74
  name: "REA artifact comparison",
75
75
  version: "1",
76
76
  },
77
77
  compare_functions: {
78
- predicates: ["rea.function-comparison/v1"],
78
+ predicates: ["rea.function-comparison"],
79
79
  id: "rea-function-comparison",
80
80
  name: "REA function comparison",
81
81
  version: "1",
@@ -83,11 +83,9 @@ const EXPECTED_PROVIDERS = {
83
83
  };
84
84
  const acceptsPredicate = (expected, actual) => expected.some((predicate) => predicate === actual);
85
85
  /** Find observed runtime changes and separately report static change candidates. */
86
- export const findChangedBehavior = (comparisonsInput, offset, limit) => {
86
+ export const findChangedBehavior = (comparisonsInput) => {
87
87
  const parsedInput = changedBehaviorInputSchema.parse({
88
88
  comparisons: comparisonsInput,
89
- offset,
90
- limit,
91
89
  });
92
90
  const comparisons = parsedInput.comparisons;
93
91
  const evidence = comparisons.map(parseComparisonEvidence);
@@ -95,9 +93,6 @@ export const findChangedBehavior = (comparisonsInput, offset, limit) => {
95
93
  const findings = evidence.flatMap(findingsFor).sort(compareFindings);
96
94
  const runtimeStatuses = evidence.flatMap(runtimeStatus);
97
95
  const links = uniqueSorted(evidence.flatMap((item) => [item.evidence_id, ...item.evidence_links]));
98
- if (links.length > 20_100)
99
- throw new TypeError("Changed-behavior Evidence closure exceeds limit");
100
- const page = findings.slice(parsedInput.offset, parsedInput.offset + parsedInput.limit);
101
96
  return changedBehaviorResultSchema.parse({
102
97
  behavior_status: behaviorStatus(runtimeStatuses),
103
98
  summary: {
@@ -107,13 +102,7 @@ export const findChangedBehavior = (comparisonsInput, offset, limit) => {
107
102
  unresolved: count(findings, "unresolved_branch"),
108
103
  },
109
104
  findings: {
110
- items: page,
111
- offset: parsedInput.offset,
112
- limit: parsedInput.limit,
113
- total: findings.length,
114
- next_offset: parsedInput.offset + page.length < findings.length
115
- ? parsedInput.offset + page.length
116
- : null,
105
+ items: findings,
117
106
  },
118
107
  evidence_links: links,
119
108
  limitations: uniqueSorted([
@@ -126,7 +115,6 @@ export const findChangedBehavior = (comparisonsInput, offset, limit) => {
126
115
  ...(runtimeStatuses.length === 0
127
116
  ? ["No process comparison Evidence was supplied."]
128
117
  : []),
129
- ...evidence.flatMap(artifactPaginationLimitations),
130
118
  ]),
131
119
  });
132
120
  };
@@ -170,9 +158,7 @@ const parseResult = (evidence) => {
170
158
  return;
171
159
  }
172
160
  const result = artifactComparisonResultSchema.parse(evidence.normalized_result);
173
- if (result.changes.offset !== 0)
174
- throw new TypeError("Changed-behavior analysis requires artifact comparison pagination from offset zero");
175
- assertNestedLinks(evidence, result.changes.items.flatMap(({ evidence_links: links }) => links));
161
+ assertNestedLinks(evidence, result.changes.flatMap(({ evidence_links: links }) => links));
176
162
  };
177
163
  const assertNestedLinks = (evidence, nestedLinks) => {
178
164
  const topLevel = new Set(evidence.evidence_links);
@@ -232,7 +218,7 @@ const functionFindings = (evidence) => {
232
218
  };
233
219
  const artifactFindings = (evidence) => {
234
220
  const result = artifactComparisonResultSchema.parse(evidence.normalized_result);
235
- const changes = result.changes.items.map((change) => makeFinding({
221
+ const changes = result.changes.map((change) => makeFinding({
236
222
  evidence,
237
223
  dimension: `artifact:${change.logical_path}`,
238
224
  scope: "static_candidate",
@@ -245,9 +231,7 @@ const artifactFindings = (evidence) => {
245
231
  limitations: result.limitations,
246
232
  links: change.evidence_links,
247
233
  }));
248
- return (result.status === "unknown" ||
249
- result.status === "truncated" ||
250
- result.changes.next_offset !== null) &&
234
+ return (result.status === "unknown" || result.status === "truncated") &&
251
235
  !changes.some(({ classification }) => classification === "unresolved_branch")
252
236
  ? [
253
237
  ...changes,
@@ -262,16 +246,6 @@ const artifactFindings = (evidence) => {
262
246
  ]
263
247
  : changes;
264
248
  };
265
- const artifactPaginationLimitations = (evidence) => {
266
- if (evidence.operation !== "compare_artifacts")
267
- return [];
268
- const result = artifactComparisonResultSchema.parse(evidence.normalized_result);
269
- return result.changes.next_offset === null
270
- ? []
271
- : [
272
- `Artifact comparison reports ${String(result.changes.items.length)} of ${String(result.changes.total)} changes.`,
273
- ];
274
- };
275
249
  const makeFinding = (input) => findingSchema.parse({
276
250
  scope: input.scope,
277
251
  dimension: input.dimension,
@@ -2,17 +2,17 @@ import { createHash } from "node:crypto";
2
2
  import canonicalize from "canonicalize";
3
3
  import { z } from "zod";
4
4
  import { createEvidenceCompletionLedger, evidenceCompletionRecordSchema, } from "./evidenceCompletionLedger.js";
5
- const identifierSchema = z.string().regex(/^[A-Za-z][A-Za-z0-9._-]{0,99}$/u);
5
+ const identifierSchema = z.string().regex(/^[A-Za-z][A-Za-z0-9._-]*$/u);
6
6
  const digestSchema = z.string().regex(/^[a-f0-9]{64}$/u);
7
7
  const identitySchema = z.strictObject({
8
8
  id: identifierSchema,
9
- version: z.string().min(1).max(100),
9
+ version: z.string().min(1),
10
10
  });
11
11
  const environmentSchema = z.strictObject({
12
12
  platform: identifierSchema,
13
13
  architecture: identifierSchema,
14
14
  runtime: identifierSchema,
15
- runtime_version: z.string().min(1).max(100),
15
+ runtime_version: z.string().min(1),
16
16
  });
17
17
  const scenarioSchema = z.strictObject({
18
18
  id: identifierSchema,
@@ -24,14 +24,12 @@ const skillDigestSchema = z.strictObject({
24
24
  });
25
25
  const verifierRunSchema = z
26
26
  .strictObject({
27
- schema_version: z.literal(1),
28
27
  run_id: z.string().uuid(),
29
28
  verifier_pid: z.number().int().positive(),
30
29
  parent_pid: z.number().int().nonnegative(),
31
30
  process_lineage: z.discriminatedUnion("status", [
32
31
  z.strictObject({
33
32
  status: z.literal("verified"),
34
- schema_version: z.literal(1),
35
33
  observed_at: z.iso.datetime(),
36
34
  launcher_pid: z.number().int().positive(),
37
35
  launcher_parent_pid: z.number().int().nonnegative(),
@@ -48,7 +46,7 @@ const verifierRunSchema = z
48
46
  launcher_pid: z.number().int().positive(),
49
47
  launcher_parent_pid: z.number().int().nonnegative(),
50
48
  process_group_id: z.number().int().positive().nullable(),
51
- reason: z.string().min(1).max(500),
49
+ reason: z.string().min(1),
52
50
  }),
53
51
  ]),
54
52
  })
@@ -69,18 +67,16 @@ const verifierRunSchema = z
69
67
  const reportClaimSchema = z.strictObject({
70
68
  claim_id: identifierSchema,
71
69
  scenario: scenarioSchema,
72
- artifact_sha256s: z.array(digestSchema).max(100),
70
+ artifact_sha256s: z.array(digestSchema),
73
71
  provider: identitySchema,
74
- result_schema_version: z.number().int().positive(),
75
72
  status: evidenceCompletionRecordSchema.shape.status,
76
73
  evidence_ids: evidenceCompletionRecordSchema.shape.evidence_ids,
77
74
  });
78
75
  const completionVerifierReportObjectSchema = z.strictObject({
79
- schema_version: z.literal(1),
80
76
  verifier: identitySchema,
81
77
  verifier_run: verifierRunSchema,
82
78
  environment: environmentSchema,
83
- claims: z.array(reportClaimSchema).min(1).max(10_000),
79
+ claims: z.array(reportClaimSchema).min(1),
84
80
  });
85
81
  /** Strict output contract implemented by completion-aware verifiers. */
86
82
  export const completionVerifierReportSchema = completionVerifierReportObjectSchema.superRefine((report, context) => {
@@ -97,12 +93,11 @@ const manifestClaimSchema = reportClaimSchema.omit({
97
93
  evidence_ids: true,
98
94
  });
99
95
  const completionManifestObjectSchema = z.strictObject({
100
- schema_version: z.literal(1),
101
96
  manifest_id: z.string().regex(/^ecm_[a-f0-9]{64}$/u),
102
97
  verifier: identitySchema,
103
98
  environment: environmentSchema,
104
- skill_digests: z.array(skillDigestSchema).min(1).max(100),
105
- claims: z.array(manifestClaimSchema).min(1).max(10_000),
99
+ skill_digests: z.array(skillDigestSchema).min(1),
100
+ claims: z.array(manifestClaimSchema).min(1),
106
101
  });
107
102
  const compareIdentifiers = (left, right) => left < right ? -1 : left > right ? 1 : 0;
108
103
  const isSortedUnique = (values) => values.every((value, index) => index === 0 || compareIdentifiers(values[index - 1] ?? "", value) < 0);
@@ -168,7 +163,6 @@ export const createCompletionLedgerArtifacts = (input, skillDigests) => {
168
163
  if (!isSortedUnique(skills.map(({ skill_id }) => skill_id)))
169
164
  throw new TypeError("Completion skill IDs must be unique");
170
165
  const projection = {
171
- schema_version: 1,
172
166
  verifier: report.verifier,
173
167
  environment: report.environment,
174
168
  skill_digests: skills,