rea-agents 3.1.0 → 3.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (590) hide show
  1. package/README.md +72 -95
  2. package/bridge/ghidra/ReaGhidraBridge.java +609 -841
  3. package/bridge/hopper_bridge.py +99 -344
  4. package/dist/application/AbortablePromise.js +6 -3
  5. package/dist/application/AnalysisSnapshotCache.js +0 -1
  6. package/dist/application/AnalysisSnapshotFiles.js +7 -7
  7. package/dist/application/AndroidApplicationService.js +1 -1
  8. package/dist/application/AppleApplicationService.js +1 -1
  9. package/dist/application/ArtifactExtraction.js +35 -54
  10. package/dist/application/ArtifactExtractionDestination.js +17 -0
  11. package/dist/application/ArtifactGraphConstruction.js +2 -17
  12. package/dist/application/ArtifactInventory/classify.js +2 -6
  13. package/dist/application/ArtifactInventory/hash.js +2 -20
  14. package/dist/application/ArtifactInventory/scanCanonical.js +8 -12
  15. package/dist/application/ArtifactInventory/scanReader.js +69 -51
  16. package/dist/application/ArtifactInventory.js +6 -14
  17. package/dist/application/AuthorizedArtifactInventory.js +3 -13
  18. package/dist/application/BinarySession.js +41 -13
  19. package/dist/application/BinarySessionComposition.js +0 -11
  20. package/dist/application/BinarySessionOpen.js +2 -1
  21. package/dist/application/BinarySessionRecords.js +5 -93
  22. package/dist/application/BinarySessionStatus.js +5 -16
  23. package/dist/application/BinaryTargetResolver.js +216 -0
  24. package/dist/application/BrowserEvidence.js +42 -58
  25. package/dist/application/BrowserObservationService.js +3 -6
  26. package/dist/application/BrowserScenarioCaptureService.js +3 -6
  27. package/dist/application/BrowserScenarioEvidence.js +3 -3
  28. package/dist/application/CallPathTracing.js +2 -36
  29. package/dist/application/CapabilityInventory.js +10 -15
  30. package/dist/application/ClientConfigurationDocument.js +27 -0
  31. package/dist/application/ClientRegistrationStatus.js +16 -13
  32. package/dist/application/CommandShimReplay.js +14 -1
  33. package/dist/application/DirectAnalysis.js +22 -46
  34. package/dist/application/DirectAnalysisStatus.js +5 -61
  35. package/dist/application/Doctor.js +11 -32
  36. package/dist/application/DoctorDiagnostics.js +1 -2
  37. package/dist/application/DoctorScope.js +1 -1
  38. package/dist/application/ElectronActiveEvidence.js +3 -8
  39. package/dist/application/ElectronActiveObservationService.js +3 -6
  40. package/dist/application/ElectronBoundaryAnalysis.js +7 -8
  41. package/dist/application/ElectronBoundaryGraphContext.js +1 -1
  42. package/dist/application/ElectronBoundaryGraphIpc.js +3 -3
  43. package/dist/application/ElectronBoundaryGraphNative.js +1 -2
  44. package/dist/application/ElectronBoundaryGraphWindows.js +6 -8
  45. package/dist/application/ElectronEvidence.js +4 -7
  46. package/dist/application/ElectronObservationService.js +5 -9
  47. package/dist/application/EnhancedLiteralTracing.js +42 -65
  48. package/dist/application/EnhancedTools.js +76 -44
  49. package/dist/application/EvidenceBundleCommands.js +11 -11
  50. package/dist/application/EvidenceBundleFiles.js +9 -15
  51. package/dist/application/EvidenceLedger.js +6 -41
  52. package/dist/application/FilesystemSnapshot.js +2 -3
  53. package/dist/application/InterfaceBuilderAnalysis.js +266 -0
  54. package/dist/application/InventoryProjectionEvidence.js +4 -2
  55. package/dist/application/InvestigationProviders.js +1 -1
  56. package/dist/application/JavaScriptApplicationEvidence.js +2 -5
  57. package/dist/application/JavaScriptApplicationEvidenceGraph.js +6 -10
  58. package/dist/application/JavaScriptApplicationService.js +6 -29
  59. package/dist/application/JavaScriptApplicationWorkflowEvidence.js +5 -5
  60. package/dist/application/JavaScriptApplicationWorkflowService.js +0 -8
  61. package/dist/application/JavaScriptArtifactAnalysis.js +38 -127
  62. package/dist/application/JavaScriptArtifactFiles.js +67 -107
  63. package/dist/application/JavaScriptArtifactGraphAccumulator.js +0 -7
  64. package/dist/application/JavaScriptArtifactGraphBuilder.js +7 -58
  65. package/dist/application/JavaScriptArtifactGraphBundlers.js +1 -6
  66. package/dist/application/JavaScriptArtifactGraphContext.js +12 -39
  67. package/dist/application/JavaScriptArtifactGraphDocuments.js +4 -11
  68. package/dist/application/JavaScriptArtifactGraphEvidence.js +0 -14
  69. package/dist/application/JavaScriptArtifactGraphFindings.js +3 -3
  70. package/dist/application/JavaScriptArtifactGraphStructure.js +16 -17
  71. package/dist/application/JavaScriptArtifactPathResolution.js +61 -49
  72. package/dist/application/JavaScriptArtifactReconstruction.js +5 -10
  73. package/dist/application/JavaScriptArtifactReconstructionInput.js +2 -14
  74. package/dist/application/JavaScriptJsonModules.js +2 -2
  75. package/dist/application/JavaScriptModuleRelationships.js +22 -27
  76. package/dist/application/JavaScriptReplayPlanning.js +9 -3
  77. package/dist/application/JavaScriptReplayService.js +6 -32
  78. package/dist/application/JavaScriptReturnShapeProjection.js +12 -42
  79. package/dist/application/JavaScriptRuntimeObservationEvidence.js +7 -8
  80. package/dist/application/JavaScriptRuntimeObservationService.js +4 -8
  81. package/dist/application/JavaScriptRuntimeReconciliationEvidence.js +2 -3
  82. package/dist/application/JavaScriptSemanticGraphBuilder.js +11 -41
  83. package/dist/application/JavaScriptSemanticGraphConstruction.js +5 -29
  84. package/dist/application/JavaScriptSemanticGraphEvidence.js +1 -1
  85. package/dist/application/JavaScriptSemanticGraphFingerprintProjection.js +1 -1
  86. package/dist/application/JavaScriptSemanticGraphFlowProjection.js +0 -13
  87. package/dist/application/JavaScriptSemanticGraphProjection.js +1 -3
  88. package/dist/application/JavaScriptSemanticTraceService.js +1 -10
  89. package/dist/application/JsonFiles.js +79 -0
  90. package/dist/application/LinuxHopper.js +11 -9
  91. package/dist/application/LoopbackReplay.js +26 -23
  92. package/dist/application/LoopbackReplayRecorder.js +29 -1
  93. package/dist/application/ManagedApplicationGraphService.js +1 -2
  94. package/dist/application/ManagedMemberComparisonService.js +11 -41
  95. package/dist/application/ManagedNativeVerificationService.js +1 -2
  96. package/dist/application/ManagedReconstructionService.js +1 -1
  97. package/dist/application/ManagedRuntimeCorrelationService.js +5 -8
  98. package/dist/application/NativeApiInspection.js +2 -7
  99. package/dist/application/NativeUiActionTrace.js +394 -0
  100. package/dist/application/NodeRuntimeCharacterizationService.js +3 -7
  101. package/dist/application/PermissionAuthority.js +15 -7
  102. package/dist/application/PermissionFailure.js +5 -0
  103. package/dist/application/ProcessCaptureAuthority.js +5 -7
  104. package/dist/application/ProcessCaptureJournal.js +3 -2
  105. package/dist/application/ProcessCaptureLifecycle.js +5 -12
  106. package/dist/application/ProcessCheckpoints.js +29 -11
  107. package/dist/application/ProcessCli.js +6 -16
  108. package/dist/application/ProcessEvidence.js +5 -7
  109. package/dist/application/ProcessHarness.js +52 -17
  110. package/dist/application/ProcessReactiveCoordinator.js +2 -4
  111. package/dist/application/ProcessReactiveEffects.js +9 -3
  112. package/dist/application/ProcessReactiveHarness.js +13 -7
  113. package/dist/application/ProcessSampling.js +2 -4
  114. package/dist/application/ProcessTimer.js +39 -0
  115. package/dist/application/ProjectPermissionStore.js +39 -96
  116. package/dist/application/RealHopperAssertions.js +20 -66
  117. package/dist/application/ReconstructionCoverageService.js +12 -58
  118. package/dist/application/ReconstructionObligationAuthority.js +2 -2
  119. package/dist/application/ReconstructionObligationCandidates.js +4 -4
  120. package/dist/application/ReconstructionObligationLedgerEvaluation.js +8 -15
  121. package/dist/application/ReconstructionObligationLedgerProjection.js +3 -7
  122. package/dist/application/ReconstructionObligationLedgerService.js +19 -38
  123. package/dist/application/ReferenceSourceImport.js +19 -45
  124. package/dist/application/ReferenceSourceImportEntries.js +2 -4
  125. package/dist/application/ReferenceSourceImportPolicy.js +5 -32
  126. package/dist/application/ReferenceSourceImportTypes.js +0 -16
  127. package/dist/application/RuntimeExecutableDiagnostics.js +55 -29
  128. package/dist/application/SessionProviderRouter.js +2 -2
  129. package/dist/application/Setup.js +1 -3
  130. package/dist/application/SetupClientConfiguration.js +22 -93
  131. package/dist/application/SetupRegistrationEnvironment.js +0 -7
  132. package/dist/application/StoreFileLock.js +119 -0
  133. package/dist/application/TerminalRenderer.js +2 -3
  134. package/dist/application/Uninstall.js +9 -14
  135. package/dist/application/UnknownEvidence.js +1 -1
  136. package/dist/artifacts/ArtifactPaths.js +2 -5
  137. package/dist/artifacts/ArtifactProvider.js +36 -58
  138. package/dist/artifacts/DirectoryArtifactReader.js +13 -8
  139. package/dist/artifacts/MachOSliceArtifactReader.js +1 -5
  140. package/dist/artifacts/NativeDmgArtifactReader.js +11 -11
  141. package/dist/artifacts/NibArchive.js +269 -0
  142. package/dist/artifacts/SafeOutputTree.js +15 -24
  143. package/dist/browser/BrowserProcessStartup.js +1 -2
  144. package/dist/browser/CdpAuthorizedMainFrame.js +16 -0
  145. package/dist/browser/CdpBrowserProvider.js +3 -13
  146. package/dist/browser/CdpCanonicalJsonDigest.js +9 -0
  147. package/dist/browser/CdpCaptureDocuments.js +28 -76
  148. package/dist/browser/CdpCaptureEventBodyShapes.js +13 -33
  149. package/dist/browser/CdpCaptureEventHandlers.js +22 -87
  150. package/dist/browser/CdpCaptureEvents.js +2 -8
  151. package/dist/browser/CdpCaptureStorage.js +9 -20
  152. package/dist/browser/CdpCaptureStorageFingerprints.js +85 -98
  153. package/dist/browser/CdpCaptureValues.js +21 -21
  154. package/dist/browser/CdpConnection.js +10 -25
  155. package/dist/browser/CdpElectronInspection.js +26 -50
  156. package/dist/browser/CdpElectronProvider.js +10 -35
  157. package/dist/browser/CdpElectronScriptEvents.js +8 -16
  158. package/dist/browser/CdpElectronScripts.js +6 -35
  159. package/dist/browser/CdpElectronWorkers.js +6 -10
  160. package/dist/browser/CdpEndpoint.js +25 -41
  161. package/dist/browser/CdpObservationSession.js +14 -26
  162. package/dist/browser/CdpPageCapture.js +34 -48
  163. package/dist/browser/CdpPageCaptureScripts.js +1 -19
  164. package/dist/browser/CdpPageCaptureWorkers.js +6 -10
  165. package/dist/browser/CdpSafeMetadata.js +19 -22
  166. package/dist/browser/CdpScreenshot.js +3 -5
  167. package/dist/browser/CdpTargetSession.js +1 -2
  168. package/dist/browser/CdpWebMcpDiscovery.js +13 -22
  169. package/dist/browser/ElectronFileScope.js +8 -19
  170. package/dist/browser/JavaScriptRuntimeScope.js +9 -14
  171. package/dist/browser/PlaywrightBrowserScenarioProvider.js +31 -64
  172. package/dist/browser/PlaywrightElectronActiveActions.js +54 -69
  173. package/dist/browser/PlaywrightElectronActiveProvider.js +14 -34
  174. package/dist/browser/PlaywrightExecutionBoundary.js +16 -5
  175. package/dist/browser/PlaywrightScenarioActions.js +3 -7
  176. package/dist/browser/PlaywrightScenarioArtifacts.js +23 -92
  177. package/dist/browser/PlaywrightScenarioBrowser.js +3 -5
  178. package/dist/browser/PlaywrightScenarioEvents.js +45 -94
  179. package/dist/browser/PlaywrightScenarioSession.js +14 -30
  180. package/dist/browser/PngVisualDiff.js +22 -14
  181. package/dist/browser/SensitiveTextCapture.js +0 -17
  182. package/dist/browser/V8InspectorCaptureProjection.js +7 -8
  183. package/dist/browser/V8InspectorEndpoint.js +12 -14
  184. package/dist/browser/V8InspectorProvider.js +20 -61
  185. package/dist/browser/WebSourceMapFetcher.js +56 -176
  186. package/dist/catalogIdentity.js +0 -54
  187. package/dist/cli/artifactCommands.js +49 -77
  188. package/dist/cli/coreAnalysisCommands.js +83 -133
  189. package/dist/cli/javascriptApplicationAnalysis.js +1 -9
  190. package/dist/cli/managedCommands.js +5 -270
  191. package/dist/cli/setupCommands.js +3 -12
  192. package/dist/cli/utilityCommands.js +7 -41
  193. package/dist/cli.js +0 -2
  194. package/dist/cliApplicationCommands.js +42 -112
  195. package/dist/cliBrowserAdvancedCommands.js +10 -106
  196. package/dist/cliBrowserCommands.js +15 -127
  197. package/dist/cliBrowserContext.js +30 -0
  198. package/dist/cliCommandNames.js +4 -5
  199. package/dist/cliElectronCommands.js +8 -72
  200. package/dist/cliEvidenceCommands.js +8 -77
  201. package/dist/cliJavaScriptRuntimeCommands.js +9 -91
  202. package/dist/cliJsonInput.js +4 -14
  203. package/dist/cliObservationOptions.js +11 -96
  204. package/dist/cliPolicyCommands.js +2 -17
  205. package/dist/cliProcessCommands.js +3 -3
  206. package/dist/cliSetup.js +0 -13
  207. package/dist/config/browserScenario.js +2 -2
  208. package/dist/config/environment.js +0 -9
  209. package/dist/config/parseConfig.js +1 -33
  210. package/dist/config/parsers.js +6 -27
  211. package/dist/config/passiveObservation.js +7 -77
  212. package/dist/config/permissions.js +0 -7
  213. package/dist/contracts/analysisSearchContract.js +2 -5
  214. package/dist/contracts/applicationToolContracts.js +56 -109
  215. package/dist/contracts/applicationWorkflowInputContracts.js +27 -102
  216. package/dist/contracts/artifactComparisonExample.js +58 -60
  217. package/dist/contracts/artifactToolContracts.js +20 -67
  218. package/dist/contracts/browserScenarioToolContracts.js +6 -51
  219. package/dist/contracts/browserToolContracts.js +8 -73
  220. package/dist/contracts/electronToolContracts.js +8 -108
  221. package/dist/contracts/enhancedInputs.js +23 -54
  222. package/dist/contracts/errorSchemas.js +0 -1
  223. package/dist/contracts/functionComparisonExample.js +10 -24
  224. package/dist/contracts/functionInstructionContract.js +1 -3
  225. package/dist/contracts/functionWorkflowToolContracts.js +2 -2
  226. package/dist/contracts/hopperMemoryContracts.js +3 -3
  227. package/dist/contracts/investigationExamples.js +14 -11
  228. package/dist/contracts/javascriptApplicationWorkflowExamples.js +12 -19
  229. package/dist/contracts/javascriptRuntimeObservationToolContracts.js +2 -20
  230. package/dist/contracts/javascriptRuntimeReconciliationExample.js +45 -12
  231. package/dist/contracts/managedToolContracts.js +6 -95
  232. package/dist/contracts/managedWorkflowExamples.js +77 -128
  233. package/dist/contracts/managedWorkflowToolContracts.js +51 -77
  234. package/dist/contracts/nativeToolContracts.js +7 -11
  235. package/dist/contracts/processCaptureExample.js +2 -69
  236. package/dist/contracts/promptContracts.js +49 -67
  237. package/dist/contracts/providerSelection.js +0 -1
  238. package/dist/contracts/reconstructionReadinessExample.js +1 -6
  239. package/dist/contracts/sessionStatusContract.js +1 -17
  240. package/dist/contracts/sessionToolSchemas.js +6 -15
  241. package/dist/contracts/toolContractExamples.js +11 -11
  242. package/dist/contracts/toolContractHelpers.js +0 -4
  243. package/dist/contracts/toolContracts.js +60 -71
  244. package/dist/contracts/toolEffects.js +5 -13
  245. package/dist/contracts/toolOutputSchemaGroups.js +37 -91
  246. package/dist/contracts/toolOutputSchemaPrimitives.js +16 -56
  247. package/dist/contracts/toolSchemaMetadata.js +8 -19
  248. package/dist/contracts/unknownContractExamples.js +0 -2
  249. package/dist/domain/analysisErrorPresentation.js +46 -54
  250. package/dist/domain/analysisErrorProjection.js +28 -37
  251. package/dist/domain/analysisProfile.js +3 -31
  252. package/dist/domain/analysisSnapshot.js +3 -12
  253. package/dist/domain/androidApplication.js +15 -54
  254. package/dist/domain/appleApplication.js +24 -67
  255. package/dist/domain/artifactComparison.js +11 -29
  256. package/dist/domain/artifactGraph.js +14 -44
  257. package/dist/domain/artifactInspection.js +38 -69
  258. package/dist/domain/artifactInventoryEvidence.js +27 -21
  259. package/dist/domain/binaryTarget.js +2 -221
  260. package/dist/domain/browserCaptureComparison.js +47 -24
  261. package/dist/domain/browserObservation.js +28 -193
  262. package/dist/domain/browserObservationSchemas.js +5 -23
  263. package/dist/domain/browserScenario.js +11 -14
  264. package/dist/domain/browserScenarioCapture.js +11 -12
  265. package/dist/domain/browserScenarioCaptureValues.js +146 -84
  266. package/dist/domain/browserScenarioDiff.js +2 -59
  267. package/dist/domain/browserScenarioDiffEvidence.js +51 -0
  268. package/dist/domain/browserScenarioDiffValues.js +21 -38
  269. package/dist/domain/browserScenarioValues.js +80 -109
  270. package/dist/domain/browserSession.js +4 -7
  271. package/dist/domain/bundleComparison.js +6 -32
  272. package/dist/domain/bytecodeProvider.js +20 -19
  273. package/dist/domain/callPath.js +47 -167
  274. package/dist/domain/callPathSchemas.js +79 -0
  275. package/dist/domain/changedBehavior.js +34 -60
  276. package/dist/domain/completionLedgerGeneration.js +8 -14
  277. package/dist/domain/conformancePackage.js +126 -97
  278. package/dist/domain/conformanceReplay.js +36 -8
  279. package/dist/domain/conformanceTrustGate.js +23 -14
  280. package/dist/domain/customProtocolCapture.js +1 -1
  281. package/dist/domain/electronActiveObservation.js +70 -103
  282. package/dist/domain/electronObservation.js +14 -80
  283. package/dist/domain/electronStaticAnalysisBrowser.js +36 -46
  284. package/dist/domain/electronStaticAnalysisIpc.js +38 -14
  285. package/dist/domain/electronStaticAnalysisNative.js +1 -8
  286. package/dist/domain/electronStaticAnalysisValues.js +10 -17
  287. package/dist/domain/errors.js +33 -54
  288. package/dist/domain/eventProcessTree.js +20 -12
  289. package/dist/domain/evidence.js +2 -10
  290. package/dist/domain/evidenceBundle.js +3 -5
  291. package/dist/domain/evidenceCompletionLedger.js +6 -8
  292. package/dist/domain/functionComparison.js +4 -14
  293. package/dist/domain/functionComparisonNormalization.js +4 -11
  294. package/dist/domain/functionComparisonResults.js +25 -15
  295. package/dist/domain/functionComparisonSchemas.js +49 -33
  296. package/dist/domain/functionDossierEvidence.js +31 -156
  297. package/dist/domain/hopperStartupFailure.js +1 -1
  298. package/dist/domain/hopperValues.js +15 -136
  299. package/dist/domain/interfaceBuilderGraph.js +654 -0
  300. package/dist/domain/javascriptApplicationAnalysis.js +8 -112
  301. package/dist/domain/javascriptApplicationChangeGraph.js +22 -82
  302. package/dist/domain/javascriptApplicationEvidenceSchemas.js +59 -47
  303. package/dist/domain/javascriptApplicationGraph.js +3 -13
  304. package/dist/domain/javascriptApplicationGraphSchemas.js +12 -34
  305. package/dist/domain/javascriptApplicationVersionComparison.js +26 -30
  306. package/dist/domain/javascriptApplicationVersionComparisonSchemas.js +123 -68
  307. package/dist/domain/javascriptApplicationVersionItems.js +120 -53
  308. package/dist/domain/javascriptApplicationVersionKeys.js +24 -11
  309. package/dist/domain/javascriptAstFingerprint.js +25 -58
  310. package/dist/domain/javascriptAstValues.js +9 -0
  311. package/dist/domain/javascriptExportInstrumentation.js +2 -4
  312. package/dist/domain/javascriptExportShapeComparison.js +6 -7
  313. package/dist/domain/javascriptExportShapeComparisonSchemas.js +68 -75
  314. package/dist/domain/javascriptExportShapeSelection.js +17 -19
  315. package/dist/domain/javascriptFeatureSeed.js +20 -12
  316. package/dist/domain/javascriptFeatureTrace.js +13 -67
  317. package/dist/domain/javascriptFeatureTraceSchemas.js +24 -52
  318. package/dist/domain/javascriptFeatureTraversal.js +1 -44
  319. package/dist/domain/javascriptNativeHandoff.js +1 -1
  320. package/dist/domain/javascriptReplay.js +24 -41
  321. package/dist/domain/javascriptRuntimeLoadState.js +3 -8
  322. package/dist/domain/javascriptRuntimeObservation.js +42 -103
  323. package/dist/domain/javascriptRuntimeReconciliation.js +1 -3
  324. package/dist/domain/javascriptRuntimeReconciliationActive.js +8 -17
  325. package/dist/domain/javascriptRuntimeReconciliationGraph.js +10 -23
  326. package/dist/domain/javascriptRuntimeReconciliationMatching.js +18 -12
  327. package/dist/domain/javascriptRuntimeReconciliationParsing.js +16 -45
  328. package/dist/domain/javascriptRuntimeReconciliationResult.js +4 -5
  329. package/dist/domain/javascriptRuntimeReconciliationRuntime.js +8 -12
  330. package/dist/domain/javascriptRuntimeReconciliationSchemas.js +33 -48
  331. package/dist/domain/javascriptRuntimeStaticCandidates.js +3 -3
  332. package/dist/domain/javascriptSemanticAnalysis.js +12 -45
  333. package/dist/domain/javascriptSemanticAsyncEffects.js +1 -9
  334. package/dist/domain/javascriptSemanticCallResolution.js +6 -16
  335. package/dist/domain/javascriptSemanticCalls.js +5 -32
  336. package/dist/domain/javascriptSemanticChildProcesses.js +1 -11
  337. package/dist/domain/javascriptSemanticCoverage.js +11 -0
  338. package/dist/domain/javascriptSemanticDataEffectHelpers.js +1 -8
  339. package/dist/domain/javascriptSemanticDataEffects.js +1 -11
  340. package/dist/domain/javascriptSemanticFingerprints.js +3 -5
  341. package/dist/domain/javascriptSemanticGraphSchemas.js +25 -51
  342. package/dist/domain/javascriptSemanticGraphSerialization.js +2 -13
  343. package/dist/domain/javascriptSemanticIr.js +1 -29
  344. package/dist/domain/javascriptSemanticObjects.js +1 -5
  345. package/dist/domain/javascriptSemanticPrimitives.js +2 -9
  346. package/dist/domain/javascriptSemanticProjection.js +0 -18
  347. package/dist/domain/javascriptSemanticPromises.js +9 -16
  348. package/dist/domain/javascriptSemanticProvenance.js +16 -19
  349. package/dist/domain/javascriptSemanticQuery.js +17 -139
  350. package/dist/domain/javascriptSemanticQueryAssessment.js +9 -37
  351. package/dist/domain/javascriptSemanticQueryIdentity.js +2 -23
  352. package/dist/domain/javascriptSemanticQuerySchemas.js +14 -107
  353. package/dist/domain/javascriptSemanticResources.js +1 -6
  354. package/dist/domain/javascriptSemanticReturns.js +10 -27
  355. package/dist/domain/javascriptSemanticValueTypes.js +1 -0
  356. package/dist/domain/javascriptSemanticValues.js +44 -62
  357. package/dist/domain/javascriptStaticAnalysis.js +21 -43
  358. package/dist/domain/javascriptStaticAnalysisBundler.js +34 -93
  359. package/dist/domain/javascriptStaticAnalysisCalls.js +17 -16
  360. package/dist/domain/javascriptStaticAnalysisFindings.js +3 -19
  361. package/dist/domain/javascriptStaticAnalysisHelpers.js +47 -88
  362. package/dist/domain/javascriptStaticAnalysisState.js +1 -5
  363. package/dist/domain/javascriptStaticAnalysisTypes.js +1 -0
  364. package/dist/domain/jsonShape.js +7 -33
  365. package/dist/domain/localPath.js +7 -0
  366. package/dist/domain/managedApplicationGraph.js +9 -41
  367. package/dist/domain/managedApplicationGraphCoverage.js +24 -156
  368. package/dist/domain/managedApplicationGraphNodes.js +10 -13
  369. package/dist/domain/managedArtifact.js +14 -27
  370. package/dist/domain/managedMemberComparison.js +90 -92
  371. package/dist/domain/managedMemberComparisonCoverage.js +11 -33
  372. package/dist/domain/managedMemberComparisonItems.js +221 -0
  373. package/dist/domain/managedMemberComparisonMatch.js +8 -208
  374. package/dist/domain/managedNativeVerification.js +3 -6
  375. package/dist/domain/managedNativeVerificationMatch.js +55 -59
  376. package/dist/domain/managedNativeVerificationSchemas.js +83 -47
  377. package/dist/domain/managedReconstruction.js +19 -23
  378. package/dist/domain/managedRuntimeCorrelation.js +6 -9
  379. package/dist/domain/nativeApiBoundary.js +2 -7
  380. package/dist/domain/nativeInspection.js +0 -2
  381. package/dist/domain/nativeInvestigationGraph.js +351 -0
  382. package/dist/domain/nativeValueFlow.js +61 -0
  383. package/dist/domain/nodeRuntimeCharacterization.js +1 -5
  384. package/dist/domain/objcSwiftMetadata.js +254 -0
  385. package/dist/domain/peInspection.js +1 -1
  386. package/dist/domain/permissionPolicy.js +13 -0
  387. package/dist/domain/processCapture.js +76 -113
  388. package/dist/domain/processCaptureExample.js +68 -0
  389. package/dist/domain/processCaptureParsing.js +21 -0
  390. package/dist/domain/processCaptureReactiveSchema.js +68 -0
  391. package/dist/domain/processCaptureValidation.js +1 -7
  392. package/dist/domain/processComparison.js +3 -12
  393. package/dist/domain/processReactiveMatching.js +29 -50
  394. package/dist/domain/processReactiveRuntime.js +4 -8
  395. package/dist/domain/processReactiveScenario.js +28 -94
  396. package/dist/domain/processReactiveScenarioPreflight.js +5 -30
  397. package/dist/domain/processReactiveTransition.js +33 -18
  398. package/dist/domain/processScenario.js +56 -90
  399. package/dist/domain/processTraceComparison.js +0 -8
  400. package/dist/domain/processTraceEvaluation.js +14 -4
  401. package/dist/domain/processTraceSpecification.js +11 -17
  402. package/dist/domain/protocolCapture.js +3 -3
  403. package/dist/domain/reconstructionCoverage.js +62 -129
  404. package/dist/domain/reconstructionCoverageEvaluation.js +17 -17
  405. package/dist/domain/reconstructionObligationLedgerSchemas.js +45 -72
  406. package/dist/domain/reconstructionReadiness.js +1 -2
  407. package/dist/domain/reconstructionReadinessSchemas.js +36 -38
  408. package/dist/domain/reconstructionUnknowns.js +3 -3
  409. package/dist/domain/reconstructionVerification.js +13 -47
  410. package/dist/domain/reconstructionVerificationSchemas.js +50 -38
  411. package/dist/domain/referenceSourceGraph.js +53 -61
  412. package/dist/domain/referenceSourceImportParsing.js +1 -5
  413. package/dist/domain/replayMachine.js +19 -31
  414. package/dist/domain/replayMachineRun.js +15 -63
  415. package/dist/domain/replayMachineRuntime.js +41 -41
  416. package/dist/domain/replayMachineValues.js +84 -0
  417. package/dist/domain/residualUnknown.js +25 -30
  418. package/dist/domain/runtimeCharacterization.js +15 -16
  419. package/dist/domain/runtimeIdentification.js +48 -47
  420. package/dist/domain/sourceToBundleComparison.js +9 -85
  421. package/dist/domain/sourceToBundleComparisonSchemas.js +17 -42
  422. package/dist/domain/sourceToBundleSignals.js +4 -15
  423. package/dist/domain/staticRuntimeCorrelation.js +37 -49
  424. package/dist/domain/symbolAnalysis.js +10 -19
  425. package/dist/domain/unicodeCodePointOrder.js +12 -0
  426. package/dist/domain/webBundleAnalysis.js +70 -99
  427. package/dist/domain/webBundleAnalyzer.js +2 -4
  428. package/dist/domain/webBundleAnalyzerAst.js +0 -13
  429. package/dist/domain/webBundleAnalyzerInspection.js +26 -52
  430. package/dist/domain/webBundleAnalyzerResult.js +7 -24
  431. package/dist/domain/webCaptureDiff.js +33 -73
  432. package/dist/domain/webCaptureDiffSchemas.js +86 -0
  433. package/dist/domain/webContentArtifact.js +1 -10
  434. package/dist/domain/webMcpDiscovery.js +3 -14
  435. package/dist/domain/webScreenshot.js +58 -34
  436. package/dist/domain/zipPackageFormat.js +7 -0
  437. package/dist/dotnet/ManagedArtifactInspector.js +17 -50
  438. package/dist/dotnet/ManagedMemberInspector.js +27 -58
  439. package/dist/dotnet/ManagedMemberInspectorCore.js +14 -51
  440. package/dist/dotnet/ManagedMemberInstructionDecoder.js +2 -2
  441. package/dist/dotnet/ManagedMemberRows.js +16 -16
  442. package/dist/dotnet/ManagedMetadataHeaps.js +26 -8
  443. package/dist/dotnet/ManagedMetadataInventory.js +21 -30
  444. package/dist/dotnet/ManagedMetadataInventoryRows.js +57 -63
  445. package/dist/dotnet/ManagedMetadataLayout.js +3 -5
  446. package/dist/dotnet/ManagedMethodBodyReader.js +5 -30
  447. package/dist/dotnet/ManagedNativeBoundaryHelpers.js +19 -49
  448. package/dist/dotnet/ManagedNativeBoundaryInspector.js +13 -41
  449. package/dist/dotnet/ManagedPeReader.js +2 -2
  450. package/dist/dotnet/ManagedStaticProvider.js +13 -71
  451. package/dist/generatedMcpToolCatalog.js +1 -1
  452. package/dist/generatedPackageMetadata.js +1 -1
  453. package/dist/ghidra/GhidraAnalysisProfile.js +3 -8
  454. package/dist/ghidra/GhidraClient.js +4 -12
  455. package/dist/ghidra/GhidraClientWire.js +9 -5
  456. package/dist/ghidra/GhidraDefaults.js +0 -18
  457. package/dist/ghidra/GhidraDiagnostics.js +0 -2
  458. package/dist/ghidra/GhidraDoctor.js +16 -12
  459. package/dist/ghidra/GhidraFunctionValues.js +65 -108
  460. package/dist/ghidra/GhidraInstallation.js +98 -42
  461. package/dist/ghidra/GhidraInventoryValues.js +16 -85
  462. package/dist/ghidra/GhidraLauncher.js +0 -8
  463. package/dist/ghidra/GhidraProvider.js +15 -22
  464. package/dist/ghidra/GhidraProviderCapabilities.js +6 -47
  465. package/dist/ghidra/GhidraRequestQueue.js +6 -30
  466. package/dist/ghidra/GhidraResponseBuffer.js +1 -7
  467. package/dist/ghidra/GhidraSessionValues.js +0 -2
  468. package/dist/ghidra/GhidraTransport.js +4 -7
  469. package/dist/ghidra/protocol.js +2 -2
  470. package/dist/hopper/BridgeLauncher.js +112 -36
  471. package/dist/hopper/HopperAnalysisProfile.js +1 -1
  472. package/dist/hopper/HopperCleanup.js +6 -3
  473. package/dist/hopper/HopperClient.js +4 -7
  474. package/dist/hopper/HopperProcessDiagnostic.js +2 -2
  475. package/dist/hopper/HopperProvider.js +0 -16
  476. package/dist/hopper/HopperRequestQueue.js +21 -40
  477. package/dist/hopper/HopperResponseStream.js +1 -9
  478. package/dist/hopper/HopperSessionValues.js +3 -2
  479. package/dist/hopper/HopperTargetLease.js +119 -0
  480. package/dist/hopper/LinuxPrivateDisplayDiagnostic.js +24 -31
  481. package/dist/hopper/LinuxPrivateDisplayProbe.js +5 -16
  482. package/dist/hopper/protocol.js +6 -4
  483. package/dist/main/reload.js +0 -3
  484. package/dist/main/shutdown.js +1 -1
  485. package/dist/main/state.js +0 -9
  486. package/dist/main/transport.js +0 -5
  487. package/dist/mcpDoctor.js +25 -45
  488. package/dist/native/CommandRunner.js +18 -25
  489. package/dist/native/NativeMacOSProvider.js +13 -38
  490. package/dist/native/NativeMachoInspection.js +1 -1
  491. package/dist/process/BoundedFileBytes.js +17 -0
  492. package/dist/process/ExecFileOutput.js +11 -0
  493. package/dist/process/PendingOperations.js +8 -6
  494. package/dist/process/ProcessOwnership.js +3 -2
  495. package/dist/process/ProcessOwnershipObservation.js +0 -1
  496. package/dist/process/ProviderProcess.js +7 -28
  497. package/dist/reference/ReferenceSourceReader.js +8 -24
  498. package/dist/reference/ReferenceSourceReaderEntries.js +11 -39
  499. package/dist/reference/ReferenceSourceReaderFile.js +13 -31
  500. package/dist/reference/ReferenceSourceReaderPaths.js +3 -18
  501. package/dist/reference/ReferenceSourceReaderValidate.js +3 -6
  502. package/dist/replay/JavaScriptReplayWorker.js +3 -5
  503. package/dist/replay/LinuxJavaScriptReplayRunner.js +33 -29
  504. package/dist/replay/LinuxJavaScriptReplaySandbox.js +0 -19
  505. package/dist/replay/LinuxRuntimeClosure.js +1 -3
  506. package/dist/replay/ReplayOutcome.js +1 -3
  507. package/dist/replay/ReplayProcessLifecycle.js +32 -7
  508. package/dist/replay/ReplaySeccompFile.js +29 -0
  509. package/dist/replay/ReplayWorkerProtocol.js +0 -2
  510. package/dist/replay/SystemJavaScriptReplayHost.js +45 -74
  511. package/dist/server/ProcessCaptureElicitation.js +4 -8
  512. package/dist/server/createServer.js +6 -44
  513. package/dist/server/promptCompletion.js +37 -61
  514. package/dist/server/recordDerivedEvidence.js +1 -1
  515. package/dist/server/registerApplicationTools/characterization.js +4 -8
  516. package/dist/server/registerApplicationTools/compareExportShapes.js +5 -10
  517. package/dist/server/registerApplicationTools/compareSourceToBundle.js +6 -10
  518. package/dist/server/registerApplicationTools/compareVersions.js +5 -10
  519. package/dist/server/registerApplicationTools/controlledReplay.js +3 -5
  520. package/dist/server/registerApplicationTools/coverage.js +6 -71
  521. package/dist/server/registerApplicationTools/helpers.js +1 -13
  522. package/dist/server/registerApplicationTools/obligationLedger.js +3 -2
  523. package/dist/server/registerApplicationTools/traceFeature.js +5 -9
  524. package/dist/server/registerApplicationTools/traceSemantics.js +5 -8
  525. package/dist/server/registerApplicationTools.js +0 -2
  526. package/dist/server/registerArtifactComparisonTool.js +23 -27
  527. package/dist/server/registerBrowserScenarioTool.js +4 -4
  528. package/dist/server/registerBrowserTools.js +5 -8
  529. package/dist/server/registerBundleComparisonTool.js +5 -7
  530. package/dist/server/registerCloseLifecycleTool.js +2 -16
  531. package/dist/server/registerElectronTools.js +10 -29
  532. package/dist/server/registerEnhancedTools.js +10 -11
  533. package/dist/server/registerEvidenceTools.js +15 -22
  534. package/dist/server/registerFunctionComparisonTool.js +30 -25
  535. package/dist/server/registerInvestigationTools/helpers.js +3 -32
  536. package/dist/server/registerInvestigationTools.js +20 -116
  537. package/dist/server/registerJavaScriptRuntimeObservationTools.js +6 -4
  538. package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +15 -17
  539. package/dist/server/registerManagedWorkflowTools/evidence.js +19 -35
  540. package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +3 -8
  541. package/dist/server/registerManagedWorkflowTools/planManagedRuntimeCorrelation.js +3 -8
  542. package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +10 -14
  543. package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +9 -15
  544. package/dist/server/registerOfficialTools.js +1 -43
  545. package/dist/server/registerProcessComparisonTool.js +33 -23
  546. package/dist/server/registerPrompts.js +19 -17
  547. package/dist/server/registerSessionRecordTools.js +10 -156
  548. package/dist/server/registerSessionStatusTool.js +6 -69
  549. package/dist/server/registerSessionTools.js +10 -51
  550. package/dist/server/sessionAvailabilityPolicy.js +0 -2
  551. package/dist/server/sessionEvidence.js +9 -15
  552. package/dist/server/sessionToolPolicies.js +0 -8
  553. package/dist/server/toolResult.js +14 -50
  554. package/dist/serverIdentity.js +0 -20
  555. package/install.sh +1 -1
  556. package/package.json +11 -7
  557. package/scripts/electron-active-hook.cjs +23 -55
  558. package/scripts/hopper-demo-x11.py +13 -32
  559. package/skills/reverse-engineer-anything/SKILL.md +47 -12
  560. package/skills/reverse-engineer-anything/references/evidence-workflows.md +6 -4
  561. package/skills/reverse-engineer-anything/references/javascript-applications.md +13 -13
  562. package/skills/reverse-engineer-anything/references/native-and-artifacts.md +12 -8
  563. package/dist/application/ApplicationWorkflowEvidenceResolver.js +0 -188
  564. package/dist/application/BoundedJsonFiles.js +0 -86
  565. package/dist/application/CrossVersionInventory.js +0 -129
  566. package/dist/application/CrossVersionInvestigation.js +0 -301
  567. package/dist/application/CrossVersionInvestigationCollections.js +0 -23
  568. package/dist/application/CrossVersionInvestigationEvidence.js +0 -64
  569. package/dist/application/CrossVersionInvestigationReplay.js +0 -170
  570. package/dist/application/DeferredFileAuthorization.js +0 -61
  571. package/dist/application/DoctorProjection.js +0 -43
  572. package/dist/application/EnhancedToolPagination.js +0 -22
  573. package/dist/application/EvidenceReferenceResolver.js +0 -26
  574. package/dist/application/InvestigationWorkspaceStore.js +0 -204
  575. package/dist/application/ProcessPairedExperiment.js +0 -72
  576. package/dist/application/ReconstructionCoverageWorkspaceStore.js +0 -31
  577. package/dist/application/ReconstructionReadinessService.js +0 -48
  578. package/dist/cliInvestigationCommands.js +0 -173
  579. package/dist/domain/boundedCartesianProjection.js +0 -15
  580. package/dist/domain/investigationWorkspace.js +0 -347
  581. package/dist/domain/jsonLimits.js +0 -26
  582. package/dist/domain/knownPageCoverage.js +0 -29
  583. package/dist/domain/processPairedExperiment.js +0 -128
  584. package/dist/server/javascriptApplicationResult.js +0 -106
  585. package/dist/server/permissionFailure.js +0 -12
  586. package/dist/server/registerApplicationTools/readiness.js +0 -50
  587. package/dist/server/registerEvidenceResources.js +0 -315
  588. package/dist/server/registerJavaScriptApplicationGraphResource.js +0 -65
  589. package/dist/server/registerReconstructionObligationLedgerResource.js +0 -32
  590. package/dist/server/registerReconstructionReadinessResource.js +0 -32
@@ -2,104 +2,15 @@ import { isAbsolute } from "node:path";
2
2
  import { z } from "zod";
3
3
  import { javascriptApplicationGraphSchema } from "./javascriptApplicationGraph.js";
4
4
  import { javaScriptSemanticGraphSchema } from "./javascriptSemanticGraph.js";
5
- const MAX_GRAPH_NODES = 100_000;
6
- const MAX_GRAPH_EDGES = 200_000;
7
- const countSchema = z.number().int().min(0).max(Number.MAX_SAFE_INTEGER);
5
+ const countSchema = z.number().int().min(0);
8
6
  const digestSchema = z.string().regex(/^[a-f0-9]{64}$/u);
9
- /** Default hard bounds for one local JavaScript application analysis. */
10
- export const JAVASCRIPT_APPLICATION_ANALYSIS_DEFAULT_LIMITS = {
11
- max_entries: 8_000,
12
- max_total_artifact_bytes: 512 * 1_024 * 1_024,
13
- max_artifact_entry_bytes: 128 * 1_024 * 1_024,
14
- max_compression_ratio: 1_000,
15
- max_depth: 64,
16
- max_path_bytes: 4_096,
17
- max_text_files: 5_000,
18
- max_total_text_bytes: 128 * 1_024 * 1_024,
19
- max_text_file_bytes: 8 * 1_024 * 1_024,
20
- max_ast_nodes: 2_000_000,
21
- max_findings: 8_000,
22
- max_modules: 20_000,
23
- max_source_map_sources: 5_000,
24
- max_parse_milliseconds: 30_000,
25
- };
26
- /** Combined artifact, text, AST, and graph projection bounds. */
27
- export const javascriptApplicationAnalysisLimitsSchema = z
28
- .strictObject({
29
- max_entries: z.number().int().min(1).max(1_000_000).default(8_000),
30
- max_total_artifact_bytes: z
31
- .number()
32
- .int()
33
- .min(1)
34
- .max(Number.MAX_SAFE_INTEGER)
35
- .default(512 * 1_024 * 1_024),
36
- max_artifact_entry_bytes: z
37
- .number()
38
- .int()
39
- .min(1)
40
- .max(Number.MAX_SAFE_INTEGER)
41
- .default(128 * 1_024 * 1_024),
42
- max_compression_ratio: z.number().min(1).max(100_000).default(1_000),
43
- max_depth: z.number().int().min(1).max(100).default(64),
44
- max_path_bytes: z.number().int().min(1).max(65_535).default(4_096),
45
- max_text_files: z.number().int().min(1).max(100_000).default(5_000),
46
- max_total_text_bytes: z
47
- .number()
48
- .int()
49
- .min(1)
50
- .max(512 * 1_024 * 1_024)
51
- .default(128 * 1_024 * 1_024),
52
- max_text_file_bytes: z
53
- .number()
54
- .int()
55
- .min(1)
56
- .max(64 * 1_024 * 1_024)
57
- .default(8 * 1_024 * 1_024),
58
- max_ast_nodes: z.number().int().min(1).max(20_000_000).default(2_000_000),
59
- max_findings: z.number().int().min(1).max(200_000).default(8_000),
60
- max_modules: z.number().int().min(1).max(100_000).default(20_000),
61
- max_source_map_sources: z.number().int().min(1).max(100_000).default(5_000),
62
- max_parse_milliseconds: z
63
- .number()
64
- .int()
65
- .min(1)
66
- .max(300_000)
67
- .default(30_000),
68
- })
69
- .superRefine((limits, context) => {
70
- const projectedNodes = 7 * limits.max_entries +
71
- 2 * limits.max_findings +
72
- limits.max_modules +
73
- limits.max_source_map_sources +
74
- 1;
75
- if (projectedNodes > MAX_GRAPH_NODES)
76
- context.addIssue({
77
- code: "custom",
78
- path: ["max_entries"],
79
- message: "Combined application-analysis limits can exceed the 100000-node graph contract",
80
- });
81
- const projectedEdges = 9 * limits.max_entries +
82
- 6 * limits.max_findings +
83
- limits.max_modules +
84
- limits.max_source_map_sources;
85
- if (projectedEdges > MAX_GRAPH_EDGES)
86
- context.addIssue({
87
- code: "custom",
88
- path: ["max_entries"],
89
- message: "Combined application-analysis limits can exceed the 200000-edge graph contract",
90
- });
91
- });
92
- /** Public target-free request for bounded static JavaScript application analysis. */
7
+ /** Public target-free request for static JavaScript application analysis. */
93
8
  export const analyzeJavaScriptApplicationInputSchema = z.strictObject({
94
9
  input_path: z
95
10
  .string()
96
11
  .min(1)
97
- .max(16_384)
98
12
  .refine(isAbsolute, "JavaScript application input path must be absolute"),
99
13
  format: z.enum(["auto", "asar", "directory"]).default("auto"),
100
- approved: z.literal(true),
101
- source_map_read_approved: z.boolean().default(false),
102
- limits: javascriptApplicationAnalysisLimitsSchema.default(JAVASCRIPT_APPLICATION_ANALYSIS_DEFAULT_LIMITS),
103
14
  });
104
15
  /** Compact counts for the high-level Electron architecture/security surface. */
105
16
  const electronBoundarySummarySchema = z.strictObject({
@@ -128,11 +39,7 @@ const electronBoundarySummarySchema = z.strictObject({
128
39
  const reconstructionStatisticsSchema = z.strictObject({
129
40
  relevant_files: countSchema,
130
41
  nested_asar_containers: countSchema,
131
- text_files_selected: countSchema,
132
42
  text_bytes_read: countSchema,
133
- omitted_text_files: countSchema,
134
- limit_omitted_text_files: countSchema,
135
- policy_filtered_text_files: countSchema,
136
43
  invalid_utf8_files: countSchema,
137
44
  parsed_javascript_files: countSchema,
138
45
  visited_ast_nodes: countSchema,
@@ -141,10 +48,10 @@ const reconstructionStatisticsSchema = z.strictObject({
141
48
  parse_failures: countSchema,
142
49
  truncated_scopes: countSchema,
143
50
  });
144
- /** Legacy structural JavaScript application analysis result. */
145
- export const javaScriptApplicationAnalysisResultV1Schema = z.strictObject({
146
- schema_version: z.literal(1),
147
- input_path: z.string().min(1).max(16_384),
51
+ /** JavaScript application analysis with an authenticated semantic companion. */
52
+ export const javascriptApplicationAnalysisResultSchema = z
53
+ .strictObject({
54
+ input_path: z.string().min(1),
148
55
  format: z.enum(["asar", "directory"]),
149
56
  root_artifact_sha256: digestSchema,
150
57
  inventory_manifest_id: z.string().regex(/^agm_[a-f0-9]{64}$/u),
@@ -152,12 +59,7 @@ export const javaScriptApplicationAnalysisResultV1Schema = z.strictObject({
152
59
  graph: javascriptApplicationGraphSchema,
153
60
  summary: electronBoundarySummarySchema,
154
61
  statistics: reconstructionStatisticsSchema,
155
- limitations: z.array(z.string().min(1).max(4_096)).max(1_000),
156
- });
157
- /** JavaScript application analysis with an authenticated semantic companion. */
158
- export const javaScriptApplicationAnalysisResultV2Schema = javaScriptApplicationAnalysisResultV1Schema
159
- .extend({
160
- schema_version: z.literal(2),
62
+ limitations: z.array(z.string().min(1)),
161
63
  semantic_graph: javaScriptSemanticGraphSchema,
162
64
  })
163
65
  .superRefine((result, context) => {
@@ -167,8 +69,7 @@ export const javaScriptApplicationAnalysisResultV2Schema = javaScriptApplication
167
69
  path: ["semantic_graph", "application_graph_id"],
168
70
  message: "Semantic graph must commit the containing application graph",
169
71
  });
170
- if (result.semantic_graph.root_artifact_sha256 !==
171
- result.root_artifact_sha256)
72
+ if (result.semantic_graph.root_artifact_sha256 !== result.root_artifact_sha256)
172
73
  context.addIssue({
173
74
  code: "custom",
174
75
  path: ["semantic_graph", "root_artifact_sha256"],
@@ -190,8 +91,3 @@ export const javaScriptApplicationAnalysisResultV2Schema = javaScriptApplication
190
91
  message: "Semantic node references an absent application node",
191
92
  });
192
93
  });
193
- /** Strict versioned high-level result returned inside Evidence v2. */
194
- export const javascriptApplicationAnalysisResultSchema = z.discriminatedUnion("schema_version", [
195
- javaScriptApplicationAnalysisResultV1Schema,
196
- javaScriptApplicationAnalysisResultV2Schema,
197
- ]);
@@ -13,50 +13,34 @@ export const buildJavaScriptApplicationChangeGraph = (input) => {
13
13
  ...(left === null ? [] : [left]),
14
14
  ]),
15
15
  ]);
16
- const retainedIds = orderedNodeIds.slice(0, input.limits.max_graph_nodes);
17
- const retained = new Set(retainedIds);
18
- const merged = mergeNodes(retainedIds.flatMap((nodeId) => allNodes.get(nodeId) ?? []));
16
+ const retained = new Set(orderedNodeIds);
17
+ const mergedNodes = mergeNodes(orderedNodeIds.flatMap((nodeId) => allNodes.get(nodeId) ?? []));
19
18
  const sourceEdges = uniqueEdges([
20
19
  ...input.left.edges,
21
20
  ...input.right.edges,
22
21
  ]).filter(({ source_node_id: source, target_node_id: target }) => retained.has(source) && retained.has(target));
23
22
  const comparisonEdges = input.items.flatMap((item) => changedFromEdge(item, input, retained));
24
23
  const candidateEdges = uniqueEdges([...sourceEdges, ...comparisonEdges]);
25
- const edges = candidateEdges.slice(0, input.limits.max_graph_edges);
26
- const omittedNodes = Math.max(0, orderedNodeIds.length - retainedIds.length);
27
- const omittedEdges = Math.max(0, candidateEdges.length - edges.length);
28
- const graphOmissions = omittedNodes + omittedEdges + merged.omittedObservations;
29
- const rootNodeIds = preferredRoots
30
- .filter((nodeId) => retained.has(nodeId))
31
- .slice(0, 1_000);
32
- const fallbackRoot = merged.nodes[0]?.node_id;
24
+ const rootNodeIds = preferredRoots.filter((nodeId) => retained.has(nodeId));
25
+ const fallbackRoot = mergedNodes[0]?.node_id;
33
26
  const graph = createJavaScriptApplicationGraph({
34
27
  schema: "JavaScriptApplicationGraph",
35
- schema_version: 1,
36
28
  root_node_ids: rootNodeIds.length > 0
37
29
  ? rootNodeIds
38
30
  : fallbackRoot === undefined
39
31
  ? []
40
32
  : [fallbackRoot],
41
- nodes: merged.nodes,
42
- edges,
43
- coverage: changeGraphCoverage(input, graphOmissions),
33
+ nodes: mergedNodes,
34
+ edges: candidateEdges,
35
+ coverage: changeGraphCoverage(input),
44
36
  limitations: uniqueSorted([
45
37
  ...input.left.limitations.map((value) => `Left: ${value}`),
46
38
  ...input.right.limitations.map((value) => `Right: ${value}`),
47
39
  "changed_from edges are cross-version inferences and never promote structural or semantic matches to exact identity.",
48
40
  "The change graph contains compared entities and their retained relationships; it is not an executable application.",
49
- ...(graphOmissions === 0
50
- ? []
51
- : ["The change graph omitted content at explicit caller bounds."]),
52
41
  ]),
53
42
  });
54
- return {
55
- graph,
56
- omittedNodes,
57
- omittedEdges,
58
- omittedObservations: merged.omittedObservations,
59
- };
43
+ return { graph };
60
44
  };
61
45
  const nodeCandidates = (input) => {
62
46
  const required = new Set([
@@ -106,8 +90,7 @@ const comparisonEvidence = (item, input) => {
106
90
  const left = input.left.nodes.find(({ node_id: id }) => id === item.left_node_id);
107
91
  const source = right?.observations[0]?.evidence ?? left?.observations[0]?.evidence;
108
92
  const complete = input.left.coverage.status === "complete" &&
109
- input.right.coverage.status === "complete" &&
110
- input.omittedComparisonItems === 0;
93
+ input.right.coverage.status === "complete";
111
94
  return {
112
95
  authority: "cross-version-comparison",
113
96
  state: "inferred",
@@ -132,19 +115,9 @@ const comparisonEvidence = (item, input) => {
132
115
  ? { status: "complete", truncated: false, omitted_count: 0, limits: [] }
133
116
  : {
134
117
  status: "partial",
135
- truncated: input.omittedComparisonItems > 0,
136
- omitted_count: input.omittedComparisonItems > 0
137
- ? input.omittedComparisonItems
138
- : (source?.coverage.omitted_count ?? null),
139
- limits: input.omittedComparisonItems > 0
140
- ? [
141
- {
142
- name: "max-comparison-items",
143
- value: input.limits.max_comparison_items,
144
- unit: "items",
145
- },
146
- ]
147
- : [],
118
+ truncated: input.left.coverage.truncated || input.right.coverage.truncated,
119
+ omitted_count: combineOmittedCounts(input.left.coverage.omitted_count, input.right.coverage.omitted_count),
120
+ limits: sourceCoverageLimits(input),
148
121
  },
149
122
  limitations: [
150
123
  "Cross-version pairing is inferred from the stated match basis; changed_from does not prove runtime reachability.",
@@ -153,31 +126,7 @@ const comparisonEvidence = (item, input) => {
153
126
  evidence_ids: [input.leftEvidenceId, input.rightEvidenceId],
154
127
  };
155
128
  };
156
- const changeGraphCoverage = (input, graphOmissions) => {
157
- const outputOmissions = graphOmissions + input.omittedComparisonItems;
158
- if (outputOmissions > 0)
159
- return {
160
- status: "partial",
161
- truncated: true,
162
- omitted_count: outputOmissions,
163
- limits: [
164
- {
165
- name: "max-comparison-items",
166
- value: input.limits.max_comparison_items,
167
- unit: "items",
168
- },
169
- {
170
- name: "max-graph-nodes",
171
- value: input.limits.max_graph_nodes,
172
- unit: "items",
173
- },
174
- {
175
- name: "max-graph-edges",
176
- value: input.limits.max_graph_edges,
177
- unit: "items",
178
- },
179
- ],
180
- };
129
+ const changeGraphCoverage = (input) => {
181
130
  if (input.left.coverage.status === "complete" &&
182
131
  input.right.coverage.status === "complete")
183
132
  return {
@@ -186,24 +135,21 @@ const changeGraphCoverage = (input, graphOmissions) => {
186
135
  omitted_count: 0,
187
136
  limits: [],
188
137
  };
189
- const counts = [
190
- input.left.coverage.omitted_count,
191
- input.right.coverage.omitted_count,
192
- ];
193
138
  return {
194
139
  status: "partial",
195
- truncated: false,
196
- omitted_count: counts.every((value) => value !== null)
197
- ? counts.reduce((total, value) => total + (value ?? 0), 0)
198
- : null,
199
- limits: [],
140
+ truncated: input.left.coverage.truncated || input.right.coverage.truncated,
141
+ omitted_count: combineOmittedCounts(input.left.coverage.omitted_count, input.right.coverage.omitted_count),
142
+ limits: sourceCoverageLimits(input),
200
143
  };
201
144
  };
145
+ const sourceCoverageLimits = (input) => [
146
+ ...new Map([...input.left.coverage.limits, ...input.right.coverage.limits].map((limit) => [`${limit.name}\0${limit.value}\0${limit.unit}`, limit])).values(),
147
+ ].sort((left, right) => compareCodePoints(left.name, right.name));
148
+ const combineOmittedCounts = (left, right) => left === null || right === null ? null : left + right;
202
149
  const mergeNodes = (nodes) => {
203
150
  const groups = new Map();
204
151
  for (const node of nodes)
205
152
  groups.set(node.node_id, [...(groups.get(node.node_id) ?? []), node]);
206
- let omittedObservations = 0;
207
153
  const merged = [...groups.values()].map((group) => {
208
154
  const first = group[0];
209
155
  if (first === undefined)
@@ -213,19 +159,13 @@ const mergeNodes = (nodes) => {
213
159
  .flatMap(({ observations: values }) => values)
214
160
  .map((observation) => [observation.observation_id, observation])).values(),
215
161
  ].sort((left, right) => compareCodePoints(left.observation_id, right.observation_id));
216
- omittedObservations += Math.max(0, observations.length - 64);
217
162
  return createJavaScriptApplicationNode({
218
163
  kind: first.kind,
219
164
  identity: first.identity,
220
- observations: observations
221
- .slice(0, 64)
222
- .map(({ observation_id: _id, identifier_strategy: _strategy, ...value }) => value),
165
+ observations: observations.map(({ observation_id: _id, identifier_strategy: _strategy, ...value }) => value),
223
166
  });
224
167
  });
225
- return {
226
- nodes: merged.sort((left, right) => compareCodePoints(left.node_id, right.node_id)),
227
- omittedObservations,
228
- };
168
+ return merged.sort((left, right) => compareCodePoints(left.node_id, right.node_id));
229
169
  };
230
170
  const uniqueEdges = (edges) => [...new Map(edges.map((edge) => [edge.edge_id, edge])).values()].sort((left, right) => compareCodePoints(left.edge_id, right.edge_id));
231
171
  const uniqueSorted = (values) => [...new Set(values)].sort(compareCodePoints);
@@ -1,7 +1,7 @@
1
1
  import { z } from "zod";
2
2
  const digestSchema = z.string().regex(/^[a-f0-9]{64}$/u);
3
- const boundedTextSchema = z.string().min(1).max(4_096);
4
- const boundedKeySchema = z.string().min(1).max(512);
3
+ const boundedTextSchema = z.string().min(1);
4
+ const boundedKeySchema = z.string().min(1);
5
5
  const unsafePathSegments = new Set(["", ".", ".."]);
6
6
  const isSafeRelativePath = (path) => {
7
7
  if (path.startsWith("/") || path.includes("\\"))
@@ -11,7 +11,6 @@ const isSafeRelativePath = (path) => {
11
11
  const relativePathSchema = z
12
12
  .string()
13
13
  .min(1)
14
- .max(4_096)
15
14
  .refine(isSafeRelativePath, "Expected a normalized relative POSIX path without traversal");
16
15
  /** Authority that produced one node observation or relationship. */
17
16
  const applicationEvidenceAuthoritySchema = z.enum([
@@ -47,7 +46,6 @@ const applicationConfidenceSchema = z.enum([
47
46
  const applicationUnavailableReasonSchema = z.enum([
48
47
  "not-applicable",
49
48
  "not-observed",
50
- "not-approved",
51
49
  "truncated",
52
50
  "provider-unavailable",
53
51
  "unresolved",
@@ -124,7 +122,7 @@ const applicationLocationSchema = z.discriminatedUnion("kind", [
124
122
  fileOffsetRangeSchema,
125
123
  z.strictObject({
126
124
  kind: z.literal("url"),
127
- url: z.string().min(1).max(16_384),
125
+ url: z.string().min(1),
128
126
  }),
129
127
  z.strictObject({
130
128
  kind: z.literal("runtime"),
@@ -154,13 +152,13 @@ const applicationLocationReferenceSchema = z.discriminatedUnion("available", [
154
152
  ]);
155
153
  /** Versioned extractor coordinates attached to every graph fact. */
156
154
  const applicationExtractorSchema = z.strictObject({
157
- name: z.string().min(1).max(128),
158
- version: z.string().min(1).max(128),
159
- operation: z.string().min(1).max(256),
155
+ name: z.string().min(1),
156
+ version: z.string().min(1),
157
+ operation: z.string().min(1),
160
158
  executable_sha256: digestSchema.nullable(),
161
159
  });
162
160
  const applicationLimitSchema = z.strictObject({
163
- name: z.string().min(1).max(128),
161
+ name: z.string().min(1),
164
162
  value: z.number().int().min(0).max(Number.MAX_SAFE_INTEGER),
165
163
  unit: z.enum([
166
164
  "items",
@@ -173,39 +171,54 @@ const applicationLimitSchema = z.strictObject({
173
171
  ]),
174
172
  });
175
173
  /** Bounded collection coverage without treating omission as absence. */
176
- export const applicationCoverageSchema = z
177
- .strictObject({
178
- status: z.enum(["complete", "partial", "unknown", "unavailable"]),
179
- truncated: z.boolean(),
180
- omitted_count: z
181
- .number()
182
- .int()
183
- .min(0)
184
- .max(Number.MAX_SAFE_INTEGER)
185
- .nullable(),
186
- limits: z.array(applicationLimitSchema).max(32),
187
- })
188
- .superRefine((coverage, context) => {
189
- if (coverage.status === "complete" &&
190
- (coverage.truncated || coverage.omitted_count !== 0))
191
- context.addIssue({
192
- code: "custom",
193
- message: "Complete coverage cannot be truncated or omit items",
194
- });
195
- if (coverage.truncated &&
196
- (coverage.status !== "partial" ||
197
- coverage.limits.length === 0 ||
198
- coverage.omitted_count === 0))
199
- context.addIssue({
200
- code: "custom",
201
- message: "Truncated coverage must be partial, name a limit, and not claim zero omissions",
202
- });
203
- if (["unknown", "unavailable"].includes(coverage.status) &&
204
- (coverage.truncated || coverage.omitted_count !== null))
205
- context.addIssue({
206
- code: "custom",
207
- message: "Unknown or unavailable coverage cannot invent truncation counts",
208
- });
174
+ const coverageLimitsSchema = z.array(applicationLimitSchema);
175
+ const omittedCountSchema = z.number().int().min(0).max(Number.MAX_SAFE_INTEGER);
176
+ export const applicationCoverageSchema = z.union([
177
+ z.strictObject({
178
+ status: z.literal("complete"),
179
+ truncated: z.literal(false),
180
+ omitted_count: z.literal(0),
181
+ limits: coverageLimitsSchema,
182
+ }),
183
+ z.strictObject({
184
+ status: z.literal("partial"),
185
+ truncated: z.literal(false),
186
+ omitted_count: omittedCountSchema.nullable(),
187
+ limits: coverageLimitsSchema,
188
+ }),
189
+ z.strictObject({
190
+ status: z.literal("partial"),
191
+ truncated: z.literal(true),
192
+ omitted_count: z.union([omittedCountSchema.positive(), z.null()]),
193
+ limits: z.array(applicationLimitSchema).min(1),
194
+ }),
195
+ z.strictObject({
196
+ status: z.enum(["unknown", "unavailable"]),
197
+ truncated: z.literal(false),
198
+ omitted_count: z.null(),
199
+ limits: coverageLimitsSchema,
200
+ }),
201
+ ]);
202
+ /** Construct complete bounded coverage under the stated configured limits. */
203
+ export const completeApplicationCoverage = (limits = []) => applicationCoverageSchema.parse({
204
+ status: "complete",
205
+ truncated: false,
206
+ omitted_count: 0,
207
+ limits,
208
+ });
209
+ /** Construct partial non-truncated coverage without inventing omissions. */
210
+ export const partialApplicationCoverage = (limits, omittedCount) => applicationCoverageSchema.parse({
211
+ status: "partial",
212
+ truncated: false,
213
+ omitted_count: omittedCount,
214
+ limits,
215
+ });
216
+ /** Construct limit-truncated coverage with a named bound. */
217
+ export const truncatedApplicationCoverage = (limits, omittedCount) => applicationCoverageSchema.parse({
218
+ status: "partial",
219
+ truncated: true,
220
+ omitted_count: omittedCount,
221
+ limits,
209
222
  });
210
223
  const applicationGraphEvidenceBaseSchema = z.strictObject({
211
224
  authority: applicationEvidenceAuthoritySchema,
@@ -215,8 +228,8 @@ const applicationGraphEvidenceBaseSchema = z.strictObject({
215
228
  location: applicationLocationReferenceSchema,
216
229
  extractor: applicationExtractorSchema,
217
230
  coverage: applicationCoverageSchema,
218
- limitations: z.array(boundedTextSchema).max(100),
219
- evidence_ids: z.array(z.string().regex(/^ev_[a-f0-9]{64}$/u)).max(100),
231
+ limitations: z.array(boundedTextSchema),
232
+ evidence_ids: z.array(z.string().regex(/^ev_[a-f0-9]{64}$/u)),
220
233
  });
221
234
  const checkAuthorityState = (evidence, context) => {
222
235
  if (evidence.authority === "static-relationship-inference" &&
@@ -343,7 +356,7 @@ export const applicationNodeIdentitySchema = z.discriminatedUnion("strategy", [
343
356
  z.strictObject({
344
357
  strategy: z.literal("structural-fingerprint"),
345
358
  stability: z.literal("cross-version-inference"),
346
- algorithm: z.string().min(1).max(128),
359
+ algorithm: z.string().min(1),
347
360
  fingerprint_sha256: digestSchema,
348
361
  basis: z
349
362
  .array(z.enum([
@@ -354,8 +367,7 @@ export const applicationNodeIdentitySchema = z.discriminatedUnion("strategy", [
354
367
  "literals",
355
368
  "api-usage",
356
369
  ]))
357
- .min(1)
358
- .max(6),
370
+ .min(1),
359
371
  }),
360
372
  z.strictObject({
361
373
  strategy: z.literal("artifact-local-key"),
@@ -205,7 +205,7 @@ const checkGraphInvariants = (graph, context) => {
205
205
  path: ["graph_id"],
206
206
  });
207
207
  };
208
- /** Strict versioned JavaScript Application Graph with verified commitments. */
208
+ /** Strict JavaScript Application Graph with verified commitments. */
209
209
  export const javascriptApplicationGraphSchema = javascriptApplicationGraphRecordSchema.superRefine(checkGraphInvariants);
210
210
  /** Build one normalized application entity and derive all semantic IDs. */
211
211
  export const createJavaScriptApplicationNode = (input) => {
@@ -264,18 +264,8 @@ export const createJavaScriptApplicationGraph = (input) => {
264
264
  graph_id: `jag_${digestCanonical(semantic)}`,
265
265
  });
266
266
  };
267
- /** Parse a stored graph, rejecting unsupported versions and stale IDs. */
268
- export const parseJavaScriptApplicationGraph = (input) => {
269
- const envelope = z
270
- .object({ schema: z.string(), schema_version: z.number() })
271
- .passthrough()
272
- .safeParse(input);
273
- if (envelope.success &&
274
- envelope.data.schema === "JavaScriptApplicationGraph" &&
275
- envelope.data.schema_version !== 1)
276
- throw new TypeError(`Unsupported JavaScript Application Graph schema version: ${String(envelope.data.schema_version)}`);
277
- return javascriptApplicationGraphSchema.parse(input);
278
- };
267
+ /** Parse a stored graph and reject stale IDs. */
268
+ export const parseJavaScriptApplicationGraph = (input) => javascriptApplicationGraphSchema.parse(input);
279
269
  /** Compute the byte-stable SHA-256 commitment of a verified graph. */
280
270
  export const computeJavaScriptApplicationGraphSha256 = (input) => digestCanonical(parseJavaScriptApplicationGraph(input));
281
271
  /** Serialize a verified graph as RFC 8785 canonical JSON. */
@@ -1,9 +1,8 @@
1
1
  import { z } from "zod";
2
2
  import { applicationCoverageSchema, applicationGraphEvidenceSchema, applicationNodeIdentitySchema, } from "./javascriptApplicationEvidenceSchemas.js";
3
- import { isJsonWithinLimits } from "./jsonLimits.js";
4
3
  import { jsonValueSchema } from "./jsonValue.js";
5
- const boundedTextSchema = z.string().min(1).max(4_096);
6
- /** Node kinds admitted by JavaScript Application Graph v1. */
4
+ const boundedTextSchema = z.string().min(1);
5
+ /** Node kinds admitted by JavaScript Application Graph. */
7
6
  export const JAVASCRIPT_APPLICATION_NODE_KINDS = [
8
7
  "package",
9
8
  "installer",
@@ -42,7 +41,7 @@ export const JAVASCRIPT_APPLICATION_NODE_KINDS = [
42
41
  ];
43
42
  /** Provider-neutral application entity categories. */
44
43
  const applicationNodeKindSchema = z.enum(JAVASCRIPT_APPLICATION_NODE_KINDS);
45
- /** Directed relations admitted by JavaScript Application Graph v1. */
44
+ /** Directed relations admitted by JavaScript Application Graph. */
46
45
  export const JAVASCRIPT_APPLICATION_RELATIONS = [
47
46
  "contains",
48
47
  "loads",
@@ -59,27 +58,10 @@ export const JAVASCRIPT_APPLICATION_RELATIONS = [
59
58
  ];
60
59
  /** Provider-neutral relation categories. */
61
60
  const applicationRelationSchema = z.enum(JAVASCRIPT_APPLICATION_RELATIONS);
62
- const applicationPropertiesSchema = z
63
- .record(z.string().min(1).max(128), jsonValueSchema)
64
- .superRefine((properties, context) => {
65
- if (Object.keys(properties).length > 64)
66
- context.addIssue({
67
- code: "custom",
68
- message: "Application graph properties exceed 64 keys",
69
- });
70
- if (!isJsonWithinLimits(properties, {
71
- maxDepth: 6,
72
- maxNodes: 512,
73
- maxStringLength: 4_096,
74
- }))
75
- context.addIssue({
76
- code: "custom",
77
- message: "Application graph properties exceed structural limits",
78
- });
79
- });
61
+ const applicationPropertiesSchema = z.record(z.string().min(1), jsonValueSchema);
80
62
  /** One node observation before its semantic identifier is derived. */
81
63
  const applicationNodeObservationInputSchema = z.strictObject({
82
- label: z.string().min(1).max(1_024).nullable(),
64
+ label: z.string().min(1).nullable(),
83
65
  properties: applicationPropertiesSchema,
84
66
  evidence: applicationGraphEvidenceSchema,
85
67
  });
@@ -95,14 +77,14 @@ export const applicationNodeObservationSchema = applicationNodeObservationInputS
95
77
  export const applicationNodeInputSchema = z.strictObject({
96
78
  kind: applicationNodeKindSchema,
97
79
  identity: applicationNodeIdentitySchema,
98
- observations: z.array(applicationNodeObservationInputSchema).min(1).max(64),
80
+ observations: z.array(applicationNodeObservationInputSchema).min(1),
99
81
  });
100
82
  /** One stable application entity with one or more bounded observations. */
101
83
  export const applicationNodeSchema = z.strictObject({
102
84
  node_id: z.string().regex(/^jag_node_[a-f0-9]{64}$/u),
103
85
  kind: applicationNodeKindSchema,
104
86
  identity: applicationNodeIdentitySchema,
105
- observations: z.array(applicationNodeObservationSchema).min(1).max(64),
87
+ observations: z.array(applicationNodeObservationSchema).min(1),
106
88
  });
107
89
  /** One directed relationship before its semantic identifier is derived. */
108
90
  export const applicationEdgeInputSchema = z.strictObject({
@@ -123,17 +105,13 @@ export const applicationEdgeSchema = applicationEdgeInputSchema.extend({
123
105
  /** Graph content before its top-level semantic identifier is derived. */
124
106
  export const javascriptApplicationGraphInputSchema = z.strictObject({
125
107
  schema: z.literal("JavaScriptApplicationGraph"),
126
- schema_version: z.literal(1),
127
- root_node_ids: z
128
- .array(z.string().regex(/^jag_node_[a-f0-9]{64}$/u))
129
- .min(1)
130
- .max(1_000),
131
- nodes: z.array(applicationNodeSchema).min(1).max(100_000),
132
- edges: z.array(applicationEdgeSchema).max(200_000),
108
+ root_node_ids: z.array(z.string().regex(/^jag_node_[a-f0-9]{64}$/u)).min(1),
109
+ nodes: z.array(applicationNodeSchema).min(1),
110
+ edges: z.array(applicationEdgeSchema),
133
111
  coverage: applicationCoverageSchema,
134
- limitations: z.array(boundedTextSchema).max(1_000),
112
+ limitations: z.array(boundedTextSchema),
135
113
  });
136
- /** Strict stored shape for JavaScript Application Graph v1. */
114
+ /** Strict stored shape for a JavaScript Application Graph. */
137
115
  export const javascriptApplicationGraphRecordSchema = javascriptApplicationGraphInputSchema.extend({
138
116
  graph_id: z.string().regex(/^jag_[a-f0-9]{64}$/u),
139
117
  });