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
@@ -118,6 +118,8 @@ const replayTransitions = (scenario, run, observations, require) => {
118
118
  while ((run.controls[controlIndex]?.after_capture_order ??
119
119
  Number.MAX_SAFE_INTEGER) < observation.capture_order) {
120
120
  const control = run.controls[controlIndex];
121
+ if (control === undefined)
122
+ break;
121
123
  advanceControl(control, controlIndex);
122
124
  controlIndex += 1;
123
125
  }
@@ -125,6 +127,8 @@ const replayTransitions = (scenario, run, observations, require) => {
125
127
  }
126
128
  for (; controlIndex < run.controls.length; controlIndex += 1) {
127
129
  const control = run.controls[controlIndex];
130
+ if (control === undefined)
131
+ break;
128
132
  advanceControl(control, controlIndex);
129
133
  }
130
134
  require(transitionIndex ===
@@ -141,10 +145,11 @@ const validateControls = (run, observations, require) => {
141
145
  require(control.sequence ===
142
146
  index, `reactive_run.controls[${String(index)}].sequence`, "reactive control sequence must be contiguous");
143
147
  require(admittedOrders.has(control.after_capture_order), `reactive_run.controls[${String(index)}].after_capture_order`, "reactive control cutoff must identify the last admitted observation");
148
+ const previous = run.controls.at(index - 1);
144
149
  require(index === 0 ||
145
- control.after_capture_order >=
146
- run.controls[index - 1]
147
- .after_capture_order, `reactive_run.controls[${String(index)}].after_capture_order`, "reactive control cutoffs must be ordered");
150
+ (previous !== undefined &&
151
+ control.after_capture_order >=
152
+ previous.after_capture_order), `reactive_run.controls[${String(index)}].after_capture_order`, "reactive control cutoffs must be ordered");
148
153
  }
149
154
  };
150
155
  /** Validate one capture's reactive journal by replaying the production reducer. */
@@ -1,7 +1,11 @@
1
1
  import { validateProcessCaptureReactiveRun } from "./processCaptureReactiveValidation.js";
2
2
  import { replayMachineSchema } from "./replayMachine.js";
3
3
  import { digestProcessCommitment } from "./processScenario.js";
4
- const orderedTimestamps = (values) => values.every((value, index) => index === 0 || value.at_ms >= values[index - 1].at_ms);
4
+ const orderedTimestamps = (values) => values.every((value, index) => {
5
+ const previous = values[index - 1];
6
+ return previous === undefined || value.at_ms >= previous.at_ms;
7
+ });
8
+ const transitionsAreContiguous = (previous, current) => previous !== undefined && previous.state_after === current.state_before;
5
9
  const validateCommitments = (capture, require) => {
6
10
  const { manifest } = capture;
7
11
  require(manifest.scenario.executable_sha256 ===
@@ -82,12 +86,6 @@ const validateLifecycle = (capture, require) => {
82
86
  require(capture.exit.reason === "exited" ||
83
87
  capture.exit.code ===
84
88
  null, "exit", "deadline termination cannot declare a normal exit code");
85
- require(capture.settlement.state !== "quiesced" ||
86
- capture.settlement.cleanup_outcome ===
87
- "not_required", "settlement.cleanup_outcome", "quiesced settlement cannot require cleanup");
88
- require(capture.settlement.state === "quiesced" ||
89
- capture.settlement.cleanup_outcome !==
90
- "not_required", "settlement.cleanup_outcome", "non-quiesced settlement must report cleanup");
91
89
  };
92
90
  const shimPlans = (capture) => capture.manifest.shim_plan.flatMap((shim) => typeof shim === "object" &&
93
91
  shim !== null &&
@@ -192,13 +190,13 @@ const validateReplayEvents = (capture, require) => {
192
190
  if (index === 0)
193
191
  require(transition.state_before ===
194
192
  machine?.initial_state, "replay_transitions", "first replay transition does not start at the declared initial state");
193
+ const previous = capture.replay_transitions[index - 1];
195
194
  if (index > 0)
196
- require(capture.replay_transitions[index - 1].state_after ===
197
- transition.state_before, "replay_transitions", "replay transition states are not contiguous");
195
+ require(transitionsAreContiguous(previous, transition), "replay_transitions", "replay transition states are not contiguous");
198
196
  }
199
197
  };
200
198
  /** Recompute v4 commitments and cross-field invariants without side effects. */
201
- export const validateProcessCapture = (capture) => {
199
+ export const collectProcessCaptureIssues = (capture) => {
202
200
  const issues = [];
203
201
  const require = (condition, path, message) => {
204
202
  if (!condition)
@@ -1,5 +1,5 @@
1
+ import canonicalize from "canonicalize";
1
2
  import { z } from "zod";
2
- import { validateProcessCapture } from "./processCapture.js";
3
3
  import { jsonValueSchema } from "./jsonValue.js";
4
4
  import { compareProcessTraces, processTraceOutcomesDiffer, processTraceComparisonResultSchema, } from "./processTraceComparison.js";
5
5
  import { dimensionsForTraceSources, traceCoversObservedDimension, } from "./processTraceDimensionProjection.js";
@@ -97,6 +97,10 @@ const filesystemObservations = (capture) => [
97
97
  effects: capture.filesystem_effects,
98
98
  },
99
99
  ];
100
+ const sameJsonValue = (left, right) => {
101
+ const encodedLeft = canonicalize(left);
102
+ return encodedLeft !== undefined && encodedLeft === canonicalize(right);
103
+ };
100
104
  /** Canonical observations for one process-comparison dimension. */
101
105
  export const processDimensionObservations = (capture, dimension) => {
102
106
  switch (dimension) {
@@ -117,7 +121,7 @@ export const processDimensionObservations = (capture, dimension) => {
117
121
  }
118
122
  };
119
123
  const classifyCollection = (left, right) => {
120
- if (JSON.stringify(left) === JSON.stringify(right))
124
+ if (sameJsonValue(left, right))
121
125
  return "unchanged";
122
126
  if (left.length === 0)
123
127
  return "added";
@@ -141,7 +145,7 @@ const firstCollectionDivergence = (dimension, left, right) => {
141
145
  for (let index = 0; index < length; index += 1) {
142
146
  const leftValue = left[index] ?? null;
143
147
  const rightValue = right[index] ?? null;
144
- if (JSON.stringify(leftValue) === JSON.stringify(rightValue))
148
+ if (sameJsonValue(leftValue, rightValue))
145
149
  continue;
146
150
  return {
147
151
  status: "found",
@@ -164,15 +168,8 @@ const chooseFirstDivergence = (candidates) => {
164
168
  })[0] ?? { status: "none" });
165
169
  };
166
170
  const assertComparable = (left, right, options) => {
167
- const invalid = [
168
- ...validateProcessCapture(left),
169
- ...validateProcessCapture(right),
170
- ];
171
- if (invalid.length > 0)
172
- throw new TypeError(`Invalid Process Capture v4: ${invalid[0].path}`);
173
- if (left.schema_version !== right.schema_version ||
174
- left.manifest.comparison_contract_sha256 !==
175
- right.manifest.comparison_contract_sha256)
171
+ if (left.manifest.comparison_contract_sha256 !==
172
+ right.manifest.comparison_contract_sha256)
176
173
  throw new TypeError("Process captures have incompatible comparison contracts");
177
174
  if (options.maxCaptureAgeMs === undefined)
178
175
  return;
@@ -239,8 +236,7 @@ const compareDimensions = (left, right, sameNormalization) => {
239
236
  interaction: classify("interaction", left.interaction_events, right.interaction_events),
240
237
  exit: hasUnknown(left, "exit") || hasUnknown(right, "exit")
241
238
  ? "unknown"
242
- : JSON.stringify({ exit: left.exit, settlement: left.settlement }) ===
243
- JSON.stringify({ exit: right.exit, settlement: right.settlement })
239
+ : sameJsonValue({ exit: left.exit, settlement: left.settlement }, { exit: right.exit, settlement: right.settlement })
244
240
  ? "unchanged"
245
241
  : "changed",
246
242
  filesystem: classify("filesystem", filesystemObservations(left), filesystemObservations(right)),
@@ -250,7 +246,7 @@ const compareDimensions = (left, right, sameNormalization) => {
250
246
  };
251
247
  };
252
248
  /**
253
- * Compare two Process Capture v4 observations without treating absence as proof.
249
+ * Compare two process capture observations without treating absence as proof.
254
250
  *
255
251
  * Observed differences outrank residual unknowns. A capture may therefore be
256
252
  * definitively changed in one dimension while completeness remains unknown.
@@ -266,7 +262,7 @@ export const compareProcessCaptures = (left, right, options = {}) => {
266
262
  trace: compareProcessTraces(left, right, options.traceSpecification),
267
263
  };
268
264
  }
269
- const sameNormalization = JSON.stringify(left.normalization) === JSON.stringify(right.normalization);
265
+ const sameNormalization = sameJsonValue(left.normalization, right.normalization);
270
266
  const exactDimensions = compareDimensions(left, right, sameNormalization);
271
267
  const trace = options.traceSpecification === undefined
272
268
  ? undefined
@@ -52,14 +52,13 @@ export const createProcessObservation = (input) => ({
52
52
  const atMilliseconds = (value) => {
53
53
  if (typeof value !== "object" || value === null)
54
54
  return null;
55
- for (const name of ["at_ms", "dispatched_at_ms"])
56
- if (name in value) {
57
- const candidate = value[name];
58
- if (typeof candidate === "number" && Number.isSafeInteger(candidate))
59
- return candidate;
60
- }
55
+ if ("at_ms" in value && isSafeMillisecond(value.at_ms))
56
+ return value.at_ms;
57
+ if ("dispatched_at_ms" in value && isSafeMillisecond(value.dispatched_at_ms))
58
+ return value.dispatched_at_ms;
61
59
  return null;
62
60
  };
61
+ const isSafeMillisecond = (value) => typeof value === "number" && Number.isSafeInteger(value);
63
62
  /** Derive the stable capture-local identity for one normalized observation. */
64
63
  export const processObservationSubject = (source, value) => {
65
64
  if (typeof value !== "object" || value === null || Array.isArray(value))
@@ -1,18 +1,10 @@
1
1
  import canonicalize from "canonicalize";
2
2
  import { comparableProcessObservationPayload } from "./processObservation.js";
3
- import { PROCESS_REACTIVE_LIMITS, } from "./processReactiveScenario.js";
4
- const spendEvaluationWork = (budget, units) => {
5
- if (units > budget.remaining)
6
- return false;
7
- budget.remaining -= units;
8
- return true;
9
- };
10
- const noMatch = (overflow = false) => ({
11
- matched: false,
3
+ const noMatch = () => ({
12
4
  eventIds: [],
13
5
  consumeIds: [],
14
6
  lastOrder: -1,
15
- overflow,
7
+ matched: false,
16
8
  });
17
9
  const frontierOrder = (frontier, snapshot) => {
18
10
  switch (frontier.kind) {
@@ -47,8 +39,6 @@ const matchEvent = (trigger, context) => {
47
39
  const expected = canonicalJson(comparableProcessObservationPayload(trigger.exact, trigger.ignore_fields));
48
40
  const matches = [];
49
41
  for (const observation of eligibleObservations(trigger.since, context)) {
50
- if (!spendEvaluationWork(context.budget, 1))
51
- return noMatch(true);
52
42
  if (observation.source === trigger.source &&
53
43
  canonicalJson(comparableProcessObservationPayload(observation.payload, trigger.ignore_fields)) === expected)
54
44
  matches.push(observation);
@@ -58,11 +48,10 @@ const matchEvent = (trigger, context) => {
58
48
  return noMatch();
59
49
  const eventIds = matches.map(({ event_id }) => event_id);
60
50
  return {
61
- matched: true,
62
51
  eventIds,
63
52
  consumeIds: trigger.consume ? eventIds : [],
64
53
  lastOrder: matches.at(-1)?.capture_order ?? context.afterOrder,
65
- overflow: false,
54
+ matched: true,
66
55
  };
67
56
  };
68
57
  const occurrenceRange = (haystack, needle, occurrence) => {
@@ -79,8 +68,6 @@ const occurrenceRange = (haystack, needle, occurrence) => {
79
68
  const matchTerminalText = (trigger, context) => {
80
69
  const chunks = [];
81
70
  for (const observation of eligibleObservations(trigger.since, context)) {
82
- if (!spendEvaluationWork(context.budget, 1))
83
- return noMatch(true);
84
71
  if (observation.source === "terminal_raw" &&
85
72
  typeof observation.payload === "object" &&
86
73
  observation.payload !== null &&
@@ -88,16 +75,6 @@ const matchTerminalText = (trigger, context) => {
88
75
  typeof observation.payload["data"] === "string")
89
76
  chunks.push({ observation, text: observation.payload["data"] });
90
77
  }
91
- let rawBytes = 0;
92
- for (const { text } of chunks) {
93
- if (text.length > PROCESS_REACTIVE_LIMITS.terminalMatchBytes)
94
- return noMatch(true);
95
- const bytes = Buffer.byteLength(text);
96
- rawBytes += bytes;
97
- if (rawBytes > PROCESS_REACTIVE_LIMITS.terminalMatchBytes ||
98
- !spendEvaluationWork(context.budget, bytes))
99
- return noMatch(true);
100
- }
101
78
  const range = occurrenceRange(chunks.map(({ text }) => text).join(""), trigger.literal, trigger.occurrence);
102
79
  if (range === null)
103
80
  return noMatch();
@@ -118,20 +95,32 @@ const matchTerminalText = (trigger, context) => {
118
95
  .map(({ observation }) => observation);
119
96
  const eventIds = matched.map(({ event_id }) => event_id);
120
97
  return {
121
- matched: true,
122
98
  eventIds,
123
99
  consumeIds: trigger.consume ? eventIds : [],
124
100
  lastOrder: matched.at(-1)?.capture_order ?? context.afterOrder,
125
- overflow: false,
101
+ matched: true,
102
+ };
103
+ };
104
+ const mergeMatches = (matches) => {
105
+ const eventIds = new Set();
106
+ const consumeIds = new Set();
107
+ let lastOrder = -1;
108
+ let matched = true;
109
+ for (const match of matches) {
110
+ for (const eventId of match.eventIds)
111
+ eventIds.add(eventId);
112
+ for (const eventId of match.consumeIds)
113
+ consumeIds.add(eventId);
114
+ lastOrder = Math.max(lastOrder, match.lastOrder);
115
+ matched &&= match.matched;
116
+ }
117
+ return {
118
+ eventIds: [...eventIds],
119
+ consumeIds: [...consumeIds],
120
+ lastOrder,
121
+ matched,
126
122
  };
127
123
  };
128
- const mergeMatches = (matches) => ({
129
- matched: matches.every(({ matched }) => matched),
130
- eventIds: [...new Set(matches.flatMap(({ eventIds }) => eventIds))],
131
- consumeIds: [...new Set(matches.flatMap(({ consumeIds }) => consumeIds))],
132
- lastOrder: Math.max(-1, ...matches.map(({ lastOrder }) => lastOrder)),
133
- overflow: matches.some(({ overflow }) => overflow),
134
- });
135
124
  const matchEarliestPrefix = (trigger, context) => {
136
125
  for (const observation of context.snapshot.observations) {
137
126
  if (observation.capture_order <= context.afterOrder)
@@ -143,7 +132,7 @@ const matchEarliestPrefix = (trigger, context) => {
143
132
  ...context,
144
133
  upperOrder: observation.capture_order,
145
134
  });
146
- if (matched.matched || matched.overflow)
135
+ if (matched.matched)
147
136
  return matched;
148
137
  }
149
138
  return noMatch();
@@ -158,9 +147,7 @@ const matchTrigger = (trigger, context) => {
158
147
  if (trigger.kind === "any") {
159
148
  const evaluated = trigger.triggers.map((child) => matchTrigger(child, context));
160
149
  const matches = evaluated.filter(({ matched }) => matched);
161
- return matches.length === 0
162
- ? noMatch(evaluated.some(({ overflow }) => overflow))
163
- : mergeMatches(matches);
150
+ return matches.length === 0 ? noMatch() : mergeMatches(matches);
164
151
  }
165
152
  if (trigger.kind === "sequence") {
166
153
  const matches = [];
@@ -171,7 +158,7 @@ const matchTrigger = (trigger, context) => {
171
158
  afterOrder: cursor,
172
159
  });
173
160
  if (!matched.matched)
174
- return noMatch(matched.overflow);
161
+ return noMatch();
175
162
  matches.push(matched);
176
163
  cursor = matched.lastOrder;
177
164
  }
@@ -194,17 +181,16 @@ const matchTrigger = (trigger, context) => {
194
181
  ...context,
195
182
  afterOrder: cursor,
196
183
  });
197
- if (excess.matched || excess.overflow)
198
- return noMatch(excess.overflow);
184
+ if (excess.matched)
185
+ return noMatch();
199
186
  }
200
187
  if (matches.length < trigger.min)
201
- return noMatch(matches.some(({ overflow }) => overflow));
188
+ return noMatch();
202
189
  return mergeMatches(matches);
203
190
  };
204
- /** Match one trigger using a shared deterministic work budget. */
205
- export const matchProcessReactiveTrigger = (trigger, snapshot, budget) => matchTrigger(trigger, {
191
+ /** Match one trigger against every eligible retained observation. */
192
+ export const matchProcessReactiveTrigger = (trigger, snapshot) => matchTrigger(trigger, {
206
193
  snapshot,
207
- budget,
208
194
  afterOrder: -1,
209
195
  upperOrder: null,
210
196
  });
@@ -1,5 +1,5 @@
1
1
  import { matchProcessReactiveTrigger } from "./processReactiveMatching.js";
2
- import { PROCESS_REACTIVE_LIMITS, } from "./processReactiveScenario.js";
2
+ import {} from "./processReactiveScenario.js";
3
3
  export { commitProcessReactiveProposal } from "./processReactiveTransition.js";
4
4
  const counterValue = (counters, id) => counters.find((counter) => counter.id === id)?.count ?? 0;
5
5
  const observeInput = (snapshot, observation) => {
@@ -7,8 +7,7 @@ const observeInput = (snapshot, observation) => {
7
7
  if (duplicate !== undefined)
8
8
  return { kind: "invalid" };
9
9
  const prior = snapshot.observations.at(-1);
10
- if ((prior !== undefined && observation.capture_order <= prior.capture_order) ||
11
- snapshot.observations.length >= PROCESS_REACTIVE_LIMITS.retainedObservations)
10
+ if (prior !== undefined && observation.capture_order <= prior.capture_order)
12
11
  return { kind: "invalid" };
13
12
  return {
14
13
  kind: "new",
@@ -69,14 +68,11 @@ export const reduceProcessReactiveScenario = (scenario, snapshot, input) => {
69
68
  const state = scenario.states.find(({ id }) => id === observed.active_state);
70
69
  if (state === undefined)
71
70
  return finishedDecision(observed, "target_lost");
72
- const budget = { remaining: PROCESS_REACTIVE_LIMITS.evaluationWork };
73
71
  const matches = state.on.map((transition) => ({
74
72
  transition,
75
- match: matchProcessReactiveTrigger(transition.when, observed, budget),
73
+ match: matchProcessReactiveTrigger(transition.when, observed),
76
74
  uses: counterValue(observed.transition_uses, transition.id),
77
75
  }));
78
- if (matches.some(({ match }) => match.overflow))
79
- return finishedDecision(observed, "capture_incomplete");
80
76
  const evaluations = matches.map(({ transition, match, uses }) => ({
81
77
  transition_id: transition.id,
82
78
  status: uses >= transition.max_uses
@@ -89,7 +85,7 @@ export const reduceProcessReactiveScenario = (scenario, snapshot, input) => {
89
85
  const eligible = matches.filter(({ transition, match, uses }) => match.matched && uses < transition.max_uses);
90
86
  if (eligible.length === 0)
91
87
  return { kind: "waiting", snapshot: observed, evaluations };
92
- const minimumPriority = Math.min(...eligible.map(({ transition }) => transition.priority));
88
+ const minimumPriority = eligible.reduce((minimum, { transition }) => Math.min(minimum, transition.priority), Number.POSITIVE_INFINITY);
93
89
  const winners = eligible.filter(({ transition }) => transition.priority === minimumPriority);
94
90
  if (winners.length !== 1)
95
91
  return finishedDecision(observed, "ambiguous_match", evaluations);
@@ -3,34 +3,15 @@ import { jsonValueSchema } from "./jsonValue.js";
3
3
  import { processObservationSourceSchema } from "./processObservation.js";
4
4
  import { definitelyAvailableCheckpoints } from "./processReactiveCheckpointDataflow.js";
5
5
  import { preflightProcessReactiveScenario } from "./processReactiveScenarioPreflight.js";
6
- /** Fixed public bounds for Process Reactive Scenario v1. */
6
+ /** Structural depth guard for recursive Zod parsing. */
7
7
  export const PROCESS_REACTIVE_LIMITS = {
8
- states: 32,
9
- transitions: 128,
10
- triggerDepth: 6,
11
- predicates: 64,
12
- actions: 256,
13
- actionsPerTransition: 16,
14
- childrenPerComposite: 16,
15
- stateVisits: 256,
16
- transitionUses: 256,
17
- repeat: 64,
18
- retainedObservations: 256,
19
- terminalMatchBytes: 65_536,
20
- evaluationWork: 8_192,
21
- jsonDepth: 20,
22
- jsonNodes: 1_024,
23
- runtimeMs: 300_000,
8
+ // Recursive Zod schemas need a practical stack guard, not a small tree quota.
9
+ triggerDepth: 256,
10
+ jsonDepth: 256,
24
11
  };
25
- const identifierSchema = z.string().regex(/^[A-Za-z][A-Za-z0-9._-]{0,63}$/u);
26
- const checkpointNameSchema = z
27
- .string()
28
- .regex(/^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$/u);
29
- const positiveRuntime = z
30
- .number()
31
- .int()
32
- .positive()
33
- .max(PROCESS_REACTIVE_LIMITS.runtimeMs);
12
+ const identifierSchema = z.string().regex(/^[A-Za-z][A-Za-z0-9._-]*$/u);
13
+ const checkpointNameSchema = z.string().regex(/^[A-Za-z0-9][A-Za-z0-9_-]*$/u);
14
+ const positiveRuntime = z.number().int().safe().positive();
34
15
  const frontierSchema = z.discriminatedUnion("kind", [
35
16
  z.strictObject({ kind: z.literal("scenario_start") }),
36
17
  z.strictObject({ kind: z.literal("state_entry") }),
@@ -51,7 +32,6 @@ const processReactiveTriggerSchema = z.lazy(() => z.discriminatedUnion("kind", [
51
32
  exact: jsonValueSchema,
52
33
  ignore_fields: z
53
34
  .array(ignoredFieldSchema)
54
- .max(5)
55
35
  .refine((values) => new Set(values).size === values.length, {
56
36
  message: "ignored event fields must be unique",
57
37
  }),
@@ -59,8 +39,8 @@ const processReactiveTriggerSchema = z.lazy(() => z.discriminatedUnion("kind", [
59
39
  consume: z.boolean(),
60
40
  cardinality: z
61
41
  .strictObject({
62
- min: z.number().int().positive().max(256),
63
- max: z.number().int().positive().max(256),
42
+ min: z.number().int().safe().positive(),
43
+ max: z.number().int().safe().positive(),
64
44
  })
65
45
  .refine(({ min, max }) => min <= max, {
66
46
  message: "cardinality min must not exceed max",
@@ -70,40 +50,31 @@ const processReactiveTriggerSchema = z.lazy(() => z.discriminatedUnion("kind", [
70
50
  kind: z.literal("terminal_text"),
71
51
  view: z.literal("decoded"),
72
52
  encoding: z.literal("utf8"),
73
- literal: z.string().min(1).max(10_000),
53
+ literal: z.string().min(1),
74
54
  case_sensitive: z.literal(true),
75
55
  control_sequences: z.literal("include"),
76
- occurrence: z.number().int().positive().max(1_000),
56
+ occurrence: z.number().int().safe().positive(),
77
57
  since: frontierSchema,
78
58
  consume: z.boolean(),
79
59
  }),
80
60
  z.strictObject({
81
61
  kind: z.literal("all"),
82
- triggers: z
83
- .array(processReactiveTriggerSchema)
84
- .min(2)
85
- .max(PROCESS_REACTIVE_LIMITS.childrenPerComposite),
62
+ triggers: z.array(processReactiveTriggerSchema).min(2),
86
63
  }),
87
64
  z.strictObject({
88
65
  kind: z.literal("any"),
89
- triggers: z
90
- .array(processReactiveTriggerSchema)
91
- .min(2)
92
- .max(PROCESS_REACTIVE_LIMITS.childrenPerComposite),
66
+ triggers: z.array(processReactiveTriggerSchema).min(2),
93
67
  }),
94
68
  z.strictObject({
95
69
  kind: z.literal("sequence"),
96
- triggers: z
97
- .array(processReactiveTriggerSchema)
98
- .min(1)
99
- .max(PROCESS_REACTIVE_LIMITS.childrenPerComposite),
70
+ triggers: z.array(processReactiveTriggerSchema).min(1),
100
71
  }),
101
72
  z
102
73
  .strictObject({
103
74
  kind: z.literal("repeat"),
104
75
  trigger: processReactiveTriggerSchema,
105
- min: z.number().int().positive().max(PROCESS_REACTIVE_LIMITS.repeat),
106
- max: z.number().int().positive().max(PROCESS_REACTIVE_LIMITS.repeat),
76
+ min: z.number().int().safe().positive(),
77
+ max: z.number().int().safe().positive(),
107
78
  })
108
79
  .refine(({ min, max }) => min <= max, {
109
80
  message: "repeat min must not exceed max",
@@ -120,13 +91,13 @@ const signalTargetSchema = z.discriminatedUnion("kind", [
120
91
  const processReactiveActionSchema = z.discriminatedUnion("type", [
121
92
  z.strictObject({
122
93
  type: z.literal("send_input"),
123
- data: z.string().max(1_000_000),
94
+ data: z.string(),
124
95
  sensitive: z.boolean(),
125
96
  }),
126
97
  z.strictObject({
127
98
  type: z.literal("resize"),
128
- columns: z.number().int().min(1).max(1_000),
129
- rows: z.number().int().min(1).max(1_000),
99
+ columns: z.number().int().positive(),
100
+ rows: z.number().int().positive(),
130
101
  }),
131
102
  z.strictObject({ type: z.literal("close_stdin") }),
132
103
  z.strictObject({
@@ -142,42 +113,30 @@ const transitionTargetSchema = z.discriminatedUnion("kind", [
142
113
  ]);
143
114
  const transitionSchema = z.strictObject({
144
115
  id: identifierSchema,
145
- priority: z.number().int().min(0).max(1_000),
146
- max_uses: z
147
- .number()
148
- .int()
149
- .positive()
150
- .max(PROCESS_REACTIVE_LIMITS.transitionUses),
116
+ priority: z.number().int().safe().min(0),
117
+ max_uses: z.number().int().safe().positive(),
151
118
  when: processReactiveTriggerSchema,
152
- actions: z
153
- .array(processReactiveActionSchema)
154
- .max(PROCESS_REACTIVE_LIMITS.actionsPerTransition),
119
+ actions: z.array(processReactiveActionSchema),
155
120
  target: transitionTargetSchema,
156
121
  });
157
122
  const stateSchema = z.strictObject({
158
123
  id: identifierSchema,
159
- max_visits: z
160
- .number()
161
- .int()
162
- .positive()
163
- .max(PROCESS_REACTIVE_LIMITS.stateVisits),
124
+ max_visits: z.number().int().safe().positive(),
164
125
  deadline_ms: positiveRuntime,
165
- on: z.array(transitionSchema).min(1).max(128),
126
+ on: z.array(transitionSchema).min(1),
166
127
  });
167
128
  const scenarioShapeSchema = z.strictObject({
168
- version: z.literal(1),
169
129
  initial_state: identifierSchema,
170
130
  deadline_ms: positiveRuntime,
171
- states: z.array(stateSchema).min(1).max(PROCESS_REACTIVE_LIMITS.states),
131
+ states: z.array(stateSchema).min(1),
172
132
  });
173
133
  const measureTrigger = (trigger) => {
174
134
  if (trigger.kind === "event" || trigger.kind === "terminal_text")
175
- return { depth: 1, predicates: 1 };
135
+ return { depth: 1 };
176
136
  const children = trigger.kind === "repeat" ? [trigger.trigger] : trigger.triggers;
177
137
  const measured = children.map(measureTrigger);
178
138
  return {
179
- depth: 1 + Math.max(...measured.map(({ depth }) => depth)),
180
- predicates: measured.reduce((total, { predicates }) => total + predicates, 0),
139
+ depth: 1 + measured.reduce((maximum, { depth }) => Math.max(maximum, depth), 0),
181
140
  };
182
141
  };
183
142
  const collectCheckpointFrontiers = (trigger) => {
@@ -218,15 +177,12 @@ const validateTriggerSemantics = (trigger, path, context) => {
218
177
  };
219
178
  const validateTransition = (input) => {
220
179
  const { transition, validation, path, context } = input;
221
- validation.transitions += 1;
222
- validation.actions += transition.actions.length;
223
180
  const measured = measureTrigger(transition.when);
224
- validation.predicates += measured.predicates;
225
181
  validateTriggerSemantics(transition.when, [...path, "when"], context);
226
182
  if (measured.depth > PROCESS_REACTIVE_LIMITS.triggerDepth)
227
183
  context.addIssue({
228
184
  code: "custom",
229
- message: "trigger nesting exceeds the v1 limit",
185
+ message: "trigger nesting exceeds the configured limit",
230
186
  path: [...path, "when"],
231
187
  });
232
188
  if (validation.transitionIds.has(transition.id))
@@ -266,25 +222,6 @@ const validateTransition = (input) => {
266
222
  validation.adjacency.get(input.stateId)?.add(transition.target.state);
267
223
  };
268
224
  const validateTotalsAndReferences = (scenario, validation, context) => {
269
- for (const [count, limit, message] of [
270
- [
271
- validation.transitions,
272
- PROCESS_REACTIVE_LIMITS.transitions,
273
- "scenario has too many transitions",
274
- ],
275
- [
276
- validation.predicates,
277
- PROCESS_REACTIVE_LIMITS.predicates,
278
- "scenario has too many predicates",
279
- ],
280
- [
281
- validation.actions,
282
- PROCESS_REACTIVE_LIMITS.actions,
283
- "scenario has too many actions",
284
- ],
285
- ])
286
- if (count > limit)
287
- context.addIssue({ code: "custom", message, path: ["states"] });
288
225
  const available = definitelyAvailableCheckpoints(scenario);
289
226
  for (const reference of validation.checkpointReferences)
290
227
  if (!available.get(reference.stateId)?.has(reference.name))
@@ -335,9 +272,6 @@ const validateScenarioGraph = (scenario, context) => {
335
272
  checkpoints: new Set(),
336
273
  checkpointReferences: [],
337
274
  adjacency: new Map(stateIds.map((id) => [id, new Set()])),
338
- transitions: 0,
339
- predicates: 0,
340
- actions: 0,
341
275
  };
342
276
  for (const [stateIndex, state] of scenario.states.entries()) {
343
277
  if (state.deadline_ms > scenario.deadline_ms)